s4

changeset 743:af0cb6f59c8e feature-annex

s/annex/world/
author HIROSE Yuuji <yuuji@gentei.org>
date Sat, 06 Jun 2020 11:43:42 +0900
parents 3d2502af9c07
children 52e74eb05b7e
files examples/common/default/default.css s4-annex.sh s4-funcs.sh s4-world.sh
diffstat 4 files changed, 77 insertions(+), 78 deletions(-) [+]
line diff
     1.1 --- a/examples/common/default/default.css	Sat Jun 06 11:21:01 2020 +0900
     1.2 +++ b/examples/common/default/default.css	Sat Jun 06 11:43:42 2020 +0900
     1.3 @@ -343,8 +343,6 @@
     1.4  li.casmenu:hover div, li.casmenu:active div,
     1.5  li.casmenu div:hover, li.casmenu div:active
     1.6  {display: block;}
     1.7 - 
     1.8 -
     1.9  
    1.10  /*
    1.11   * PR Web
     2.1 --- a/s4-annex.sh	Sat Jun 06 11:21:01 2020 +0900
     2.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.3 @@ -1,72 +0,0 @@
     2.4 -#!/bin/sh
     2.5 -
     2.6 -if [ -z "$S4MASTERDB" -o ! -s "$S4MASTERDB" ]; then
     2.7 -  return
     2.8 -fi
     2.9 -if [ "$db" -ef "$S4MASTERDB" ]; then
    2.10 -  return		# Points to the same file
    2.11 -fi
    2.12 -
    2.13 -# Now S4ANNEX mode is ACTIVE
    2.14 -# sessdb=`dirname $S4MASTERDB`/sess.sq3
    2.15 -## skey="skey-`basename $mydir`"
    2.16 -S4NAME="[$S4WORLD]$S4NAME"
    2.17 -syncflag=${db%.*}.synctime
    2.18 -userupdateflag=`dirname $S4MASTERDB`/`basename $userupdateflag`
    2.19 -test ! -e "$userupdateflag"		&& return
    2.20 -test "$syncflag" -nt "$userupdateflag"	&& return
    2.21 -
    2.22 -#  for sub.sq3
    2.23 -# 
    2.24 -#  main: user: 'taro', 'hanako', 'shige'
    2.25 -#  sub:  user: 'taro', 'hanako', 'shige'
    2.26 -#  sub2: user_s: ('taro', 't'), ('hanako', 'h'), ('shige', 's')
    2.27 -#  then update
    2.28 -# 
    2.29 -
    2.30 -## sqlite3 -cmd '.timer 1' -cmd '.echo 1' $db <<EOF
    2.31 -err "Starting account synchronization"
    2.32 -err "db=$db mas=$S4MASTERDB sessdb=$sessdb"
    2.33 -num=$(sqlite3 -bail -cmd 'PRAGMA FOREIGN_KEYS=on' $db <<EOF
    2.34 -ATTACH DATABASE "$S4MASTERDB" AS m;
    2.35 -CREATE TABLE IF NOT EXISTS user(name, primary key(name));
    2.36 -BEGIN;
    2.37 -DElETE FROM main.user WHERE rowid NOT IN (SELECT rowid FROM m.user);
    2.38 -INSERT INTO main.user(rowid, name)
    2.39 -       SELECT rowid, name FROM m.user
    2.40 -       WHERE m.user.rowid NOT IN (SELECT rowid FROM user);
    2.41 -UPDATE user SET name = (SELECT name FROM m.user WHERE main.user.rowid=m.user.rowid);
    2.42 -DELETE FROM main.user_s WHERE rowid NOT IN (SELECT rowid FROM m.user_s);
    2.43 -REPLACE INTO main.user_s(rowid, name, key, type, val, bin)
    2.44 -	SELECT rowid,* FROM m.user_s;
    2.45 -DELETE FROM main.user_m WHERE rowid NOT IN (SELECT rowid FROM m.user_m);
    2.46 -REPLACE INTO main.user_m(rowid, name, key, type, val, bin)
    2.47 -	SELECT rowid,* FROM m.user_m
    2.48 -	WHERE key NOT LIKE '%cache%';
    2.49 -END;
    2.50 -
    2.51 -/* Compare user tables */
    2.52 -WITH master AS (
    2.53 -  SELECT p.rowid,* FROM m.user p
    2.54 -  	 NATURAL LEFT JOIN m.user_s
    2.55 -	 NATURAL LEFT JOIN m.user_m
    2.56 -), annex AS (
    2.57 -  SELECT p.rowid,* FROM user p
    2.58 -  	 NATURAL LEFT JOIN user_s
    2.59 - 	 NATURAL LEFT JOIN user_m
    2.60 -), m_a AS (
    2.61 -  SELECT * FROM master EXCEPT SELECT * FROM annex
    2.62 -), a_m AS (
    2.63 -  SELECT * FROM annex EXCEPT SELECT * FROM master
    2.64 -) SELECT (SELECT count(*) FROM m_a) + (SELECT count(*) FROM a_m);
    2.65 -
    2.66 --- SELECT * FROM annex;
    2.67 --- SELECT rowid,* FROM m.user LIMIT 10;
    2.68 --- SELECT rowid,* FROM user WHERE rowid NOT IN (SELECT rowid FROM m.user);
    2.69 -DETACH DATABASE m;
    2.70 -EOF
    2.71 -)
    2.72 -if [ $num -eq 0 ]; then
    2.73 -  touch $syncflag
    2.74 -fi
    2.75 -return $num
     3.1 --- a/s4-funcs.sh	Sat Jun 06 11:21:01 2020 +0900
     3.2 +++ b/s4-funcs.sh	Sat Jun 06 11:43:42 2020 +0900
     3.3 @@ -89,10 +89,9 @@
     3.4    *)				touchpanel="" ;;
     3.5  esac
     3.6  
     3.7 -# If S4MASTERDB is set, behave as ANNEX s4
     3.8 +# If S4MASTERDB is set, behave in another world
     3.9  if [ -n "$S4MASTERDB" -a -s "$S4MASTERDB" ]; then
    3.10 -  # $S4ANNEX is set after s4-annex setup
    3.11 -  . ./s4-annex.sh 2>> tmp/debug.out
    3.12 +  . ./s4-world.sh 2>> tmp/debug.out
    3.13  fi
    3.14  v=""
    3.15  for i in $S4WORLDS; do
    3.16 @@ -1242,10 +1241,10 @@
    3.17    for kv in `echo $HTTP_COOKIE|sed 's/[;, ]/ /g'`; do
    3.18      k="${kv%%=*}"
    3.19      v="`echo ${kv#*=}|nkf -Ww -mQ|sed -e 's/\"/\"\"/g'`"
    3.20 -err "GetCookie: $k=[$v]"
    3.21 +    ## err "GetCookie: $k=[$v]"
    3.22      case "$k" in
    3.23        user)	_user="$v" ;;
    3.24 -      skey)	_skey="$v"; k=skey ;;
    3.25 +      skey)	_skey="$v" ;;
    3.26      esac
    3.27      query "replace into cookie values('$session', '$k', 'string', \"$v\");"
    3.28    done
    3.29 @@ -1352,7 +1351,7 @@
    3.30    # $1=passwd
    3.31    dbpswd=`getpwfield $user pswd`
    3.32    encpswd=`mycrypt "$1" "$dbpswd"`
    3.33 -  # err user=$user, pswd=$1, db=$dbpswd, enc=$encpswd
    3.34 +  ## err user=$user, pswd=$1, db=$dbpswd, enc=$encpswd
    3.35    [ x"$dbpswd" = x"$encpswd" ]
    3.36  }
    3.37  mypwhash() {
    3.38 @@ -1405,7 +1404,6 @@
    3.39      newsession=`genrandom 34`
    3.40      if setskey "$user" "$newsession" &&
    3.41  	dbsetbyid user "$user" login "`date '+%F %T'`"; then
    3.42 -      # err gencookie "user=$user" "skey=$newsession"
    3.43        gencookie "user=$user" "skey=$newsession"
    3.44        return 0
    3.45      else
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/s4-world.sh	Sat Jun 06 11:43:42 2020 +0900
     4.3 @@ -0,0 +1,72 @@
     4.4 +#!/bin/sh
     4.5 +
     4.6 +if [ -z "$S4MASTERDB" -o ! -s "$S4MASTERDB" ]; then
     4.7 +  return
     4.8 +fi
     4.9 +if [ "$db" -ef "$S4MASTERDB" ]; then
    4.10 +  return		# Points to the same file
    4.11 +fi
    4.12 +
    4.13 +# Now Another world is ACTIVE
    4.14 +# sessdb=`dirname $S4MASTERDB`/sess.sq3
    4.15 +## skey="skey-`basename $mydir`"
    4.16 +S4NAME="[$S4WORLD]$S4NAME"
    4.17 +syncflag=${db%.*}.synctime
    4.18 +userupdateflag=`dirname $S4MASTERDB`/`basename $userupdateflag`
    4.19 +test ! -e "$userupdateflag"		&& return
    4.20 +test "$syncflag" -nt "$userupdateflag"	&& return
    4.21 +
    4.22 +#  for sub.sq3
    4.23 +# 
    4.24 +#  main: user: 'taro', 'hanako', 'shige'
    4.25 +#  sub:  user: 'taro', 'hanako', 'shige'
    4.26 +#  sub2: user_s: ('taro', 't'), ('hanako', 'h'), ('shige', 's')
    4.27 +#  then update
    4.28 +# 
    4.29 +
    4.30 +## sqlite3 -cmd '.timer 1' -cmd '.echo 1' $db <<EOF
    4.31 +err "Starting account synchronization"
    4.32 +err "db=$db mas=$S4MASTERDB sessdb=$sessdb"
    4.33 +num=$(sqlite3 -bail -cmd 'PRAGMA FOREIGN_KEYS=on' $db <<EOF
    4.34 +ATTACH DATABASE "$S4MASTERDB" AS m;
    4.35 +CREATE TABLE IF NOT EXISTS user(name, primary key(name));
    4.36 +BEGIN;
    4.37 +DElETE FROM main.user WHERE rowid NOT IN (SELECT rowid FROM m.user);
    4.38 +INSERT INTO main.user(rowid, name)
    4.39 +       SELECT rowid, name FROM m.user
    4.40 +       WHERE m.user.rowid NOT IN (SELECT rowid FROM user);
    4.41 +UPDATE user SET name = (SELECT name FROM m.user WHERE main.user.rowid=m.user.rowid);
    4.42 +DELETE FROM main.user_s WHERE rowid NOT IN (SELECT rowid FROM m.user_s);
    4.43 +REPLACE INTO main.user_s(rowid, name, key, type, val, bin)
    4.44 +	SELECT rowid,* FROM m.user_s;
    4.45 +DELETE FROM main.user_m WHERE rowid NOT IN (SELECT rowid FROM m.user_m);
    4.46 +REPLACE INTO main.user_m(rowid, name, key, type, val, bin)
    4.47 +	SELECT rowid,* FROM m.user_m
    4.48 +	WHERE key NOT LIKE '%cache%';
    4.49 +END;
    4.50 +
    4.51 +/* Compare user tables */
    4.52 +WITH master AS (
    4.53 +  SELECT p.rowid,* FROM m.user p
    4.54 +  	 NATURAL LEFT JOIN m.user_s
    4.55 +	 NATURAL LEFT JOIN m.user_m
    4.56 +), thisworld AS (
    4.57 +  SELECT p.rowid,* FROM user p
    4.58 +  	 NATURAL LEFT JOIN user_s
    4.59 + 	 NATURAL LEFT JOIN user_m
    4.60 +), m_a AS (
    4.61 +  SELECT * FROM master EXCEPT SELECT * FROM thisworld
    4.62 +), a_m AS (
    4.63 +  SELECT * FROM thisworld EXCEPT SELECT * FROM master
    4.64 +) SELECT (SELECT count(*) FROM m_a) + (SELECT count(*) FROM a_m);
    4.65 +
    4.66 +-- SELECT * FROM thisworld;
    4.67 +-- SELECT rowid,* FROM m.user LIMIT 10;
    4.68 +-- SELECT rowid,* FROM user WHERE rowid NOT IN (SELECT rowid FROM m.user);
    4.69 +DETACH DATABASE m;
    4.70 +EOF
    4.71 +)
    4.72 +if [ $num -eq 0 ]; then
    4.73 +  touch $syncflag
    4.74 +fi
    4.75 +return $num