Mercurial > hgrepos > hgweb.cgi > s4
view s4-world.sh @ 756:a4523e15dfd6 feature-world
s/annex/world/
author | HIROSE Yuuji <yuuji@gentei.org> |
---|---|
date | Sat, 06 Jun 2020 11:43:42 +0900 |
parents | s4-annex.sh@1a8291d7fa3d |
children | b97f1c84bdb1 |
line wrap: on
line source
#!/bin/sh if [ -z "$S4MASTERDB" -o ! -s "$S4MASTERDB" ]; then return fi if [ "$db" -ef "$S4MASTERDB" ]; then return # Points to the same file fi # Now Another world is ACTIVE # sessdb=`dirname $S4MASTERDB`/sess.sq3 ## skey="skey-`basename $mydir`" S4NAME="[$S4WORLD]$S4NAME" syncflag=${db%.*}.synctime userupdateflag=`dirname $S4MASTERDB`/`basename $userupdateflag` test ! -e "$userupdateflag" && return test "$syncflag" -nt "$userupdateflag" && return # for sub.sq3 # # main: user: 'taro', 'hanako', 'shige' # sub: user: 'taro', 'hanako', 'shige' # sub2: user_s: ('taro', 't'), ('hanako', 'h'), ('shige', 's') # then update # ## sqlite3 -cmd '.timer 1' -cmd '.echo 1' $db <<EOF err "Starting account synchronization" err "db=$db mas=$S4MASTERDB sessdb=$sessdb" num=$(sqlite3 -bail -cmd 'PRAGMA FOREIGN_KEYS=on' $db <<EOF ATTACH DATABASE "$S4MASTERDB" AS m; CREATE TABLE IF NOT EXISTS user(name, primary key(name)); BEGIN; DElETE FROM main.user WHERE rowid NOT IN (SELECT rowid FROM m.user); INSERT INTO main.user(rowid, name) SELECT rowid, name FROM m.user WHERE m.user.rowid NOT IN (SELECT rowid FROM user); UPDATE user SET name = (SELECT name FROM m.user WHERE main.user.rowid=m.user.rowid); DELETE FROM main.user_s WHERE rowid NOT IN (SELECT rowid FROM m.user_s); REPLACE INTO main.user_s(rowid, name, key, type, val, bin) SELECT rowid,* FROM m.user_s; DELETE FROM main.user_m WHERE rowid NOT IN (SELECT rowid FROM m.user_m); REPLACE INTO main.user_m(rowid, name, key, type, val, bin) SELECT rowid,* FROM m.user_m WHERE key NOT LIKE '%cache%'; END; /* Compare user tables */ WITH master AS ( SELECT p.rowid,* FROM m.user p NATURAL LEFT JOIN m.user_s NATURAL LEFT JOIN m.user_m ), thisworld AS ( SELECT p.rowid,* FROM user p NATURAL LEFT JOIN user_s NATURAL LEFT JOIN user_m ), m_a AS ( SELECT * FROM master EXCEPT SELECT * FROM thisworld ), a_m AS ( SELECT * FROM thisworld EXCEPT SELECT * FROM master ) SELECT (SELECT count(*) FROM m_a) + (SELECT count(*) FROM a_m); -- SELECT * FROM thisworld; -- SELECT rowid,* FROM m.user LIMIT 10; -- SELECT rowid,* FROM user WHERE rowid NOT IN (SELECT rowid FROM m.user); DETACH DATABASE m; EOF ) if [ $num -eq 0 ]; then touch $syncflag fi return $num