s4

view s4-annex.sh @ 739:c892a3633baa

Annex-test: sessdb = main-sessdb
author HIROSE Yuuji <yuuji@gentei.org>
date Thu, 04 Jun 2020 20:31:25 +0900
parents ebc1c0b19bf7
children 3d2502af9c07
line source
1 #!/bin/sh
3 if [ -z "$S4MASTERDB" -o ! -s "$S4MASTERDB" ]; then
4 return
5 fi
6 if [ "$db" -ef "$S4MASTERDB" ]; then
7 return # Points to the same file
8 fi
10 # Now S4ANNEX mode is ACTIVE
11 S4ANNEXNAME=`dirname $mydir`
12 sessdb=`dirname $S4MASTERDB`/sess.sq3
13 S4ANNEXES="<div><table><tr><th><a
14 href=\"$S4MASTERURL\">本館</a></th></tr></table><div>"
15 ## skey="skey-`basename $mydir`"
16 syncflag=$dbdir/usersynced
17 userupdateflag=`dirname $S4MASTERDB`/`basename $userupdateflag`
18 test ! -e "$userupdateflag" && return
19 test "$syncflag" -nt "$userupdateflag" && return
21 # for sub.sq3
22 #
23 # main: user: 'taro', 'hanako', 'shige'
24 # sub: user: 'taro', 'hanako', 'shige'
25 # sub2: user_s: ('taro', 't'), ('hanako', 'h'), ('shige', 's')
26 # then update
27 #
29 ## sqlite3 -cmd '.timer 1' -cmd '.echo 1' $db <<EOF
30 err "Starting account synchronization"
31 err "db=$db mas=$S4MASTERDB sess=$sessdb"
32 num=$(sqlite3 -bail -cmd 'PRAGMA FOREIGN_KEYS=on' $db <<EOF
33 ATTACH DATABASE "$S4MASTERDB" AS m;
34 CREATE TABLE IF NOT EXISTS user(name, primary key(name));
35 BEGIN;
36 DElETE FROM main.user WHERE rowid NOT IN (SELECT rowid FROM m.user);
37 INSERT INTO main.user(rowid, name)
38 SELECT rowid, name FROM m.user
39 WHERE m.user.rowid NOT IN (SELECT rowid FROM user);
40 UPDATE user SET name = (SELECT name FROM m.user WHERE main.user.rowid=m.user.rowid);
41 DELETE FROM main.user_s;
42 INSERT INTO main.user_s(rowid, name, key, type, val, bin)
43 SELECT rowid,* FROM m.user_s;
44 DELETE FROM main.user_m;
45 INSERT INTO main.user_m(rowid, name, key, type, val, bin)
46 SELECT rowid,* FROM m.user_m
47 WHERE key NOT LIKE '%cache%';
48 END;
50 /* Compare user tables */
51 WITH master AS (
52 SELECT p.rowid,* FROM m.user p
53 NATURAL LEFT JOIN m.user_s
54 NATURAL LEFT JOIN m.user_m
55 ), annex AS (
56 SELECT p.rowid,* FROM user p
57 NATURAL LEFT JOIN user_s
58 NATURAL LEFT JOIN user_m
59 ), m_a AS (
60 SELECT * FROM master EXCEPT SELECT * FROM annex
61 ), a_m AS (
62 SELECT * FROM annex EXCEPT SELECT * FROM master
63 ) SELECT (SELECT count(*) FROM m_a) + (SELECT count(*) FROM a_m);
65 -- SELECT * FROM annex;
66 -- SELECT rowid,* FROM m.user LIMIT 10;
67 -- SELECT rowid,* FROM user WHERE rowid NOT IN (SELECT rowid FROM m.user);
68 DETACH DATABASE m;
69 EOF
70 )
71 if [ $num -eq 0 ]; then
72 touch $syncflag
73 fi
74 return $num