s4

view s4-init.sh @ 40:8cb89ace6110

Top link revised
author HIROSE Yuuji <yuuji@gentei.org>
date Wed, 22 Jul 2015 16:27:00 +0900
parents f2204bd941d5
children dcd7a10760c6
line source
1 #!/bin/sh
2 . `dirname $0`/s4-funcs.sh
4 create() {
5 # $1=type $2=obj $3=defs...
6 target=$1; shift
7 name=$1; shift
8 [ "$debug" ] && echo "create $target if not exists $name $@"
9 sq $db "create $target if not exists $name $@"
10 }
11 create table passwd '(name primary key, pswd, gecos, skey);'
12 : <<EOF
14 create table grp '(name primary key, tag text, gecos, owner, foreign key(owner) references passwd(name) on delete cascade on update cascade);'
15 # create table grp_mem '(gname, type, name, foreign key(gname) references grp(name) on delete cascade on update cascade, check (type in ("u", "g")), foreign key(name) references ug(name) on delete cascade on update cascade, unique(gname, type, name));'
16 create table par '(sessid text, var text, type text, val text, primary key(sessid, var, val) foreign key(sessid) references session(id) on update cascade on delete cascade);
19 create table ug '(name primay key);'
20 create trigger p2ugin 'after insert on passwd begin insert into ug values(new.name); end;'
21 create trigger g2ugin 'after insert on grp begin insert into ug values(new.name); end;'
22 create trigger p2ugup 'after update of name on passwd begin update ug set name = new.name where name=old.name; end;'
23 create trigger g2ugup 'after update of name on grp begin update ug set name = new.name where name=old.name; end;'
24 create trigger p2ugrm 'after delete on passwd begin delete from ug where name = old.name; end;'
25 create trigger g2ugrm 'after delete on grp begin delete from ug where name = old.name; end;'
27 EOF
29 create table $conftbl '(tbl,col,keytype,objtype, primary key(tbl, col))'
31 create_struct() {
32 # $1=struct-def
33 def=`basename $1`
34 tmain=${def%.*}
35 ts=${tmain}_s
36 tm=${tmain}_m
37 ct=$conftbl
38 cat $1 | \
39 (cols="" pkey="" uniq="" fkey="" fkey2=""
40 while IFS=: read prompt col keytype objtype args; do
41 addcol=""
42 case $keytype in
43 *p*|*f*)
44 addcol=$col
45 case $keytype in
46 *pf*|*fp*)
47 pkey="$pkey${pkey:+, }$col"
48 fkey="${fkey}, foreign key($col) references $objtype on delete cascade on update cascade"
49 fkey2="${fkey2}, foreign key($col) references $objtype on delete cascade on update cascade" ;;
50 *p*)
51 pkey="$pkey${pkey:+, }$col"
52 fkey2="${fkey2}, foreign key($col) references $tmain($col) on delete cascade on update cascade" ;;
53 esac
54 ;;
55 *u*) uniq="$uniq${uniq:+, }$col"
56 addcol=$col
57 ;;
58 esac
59 case $objtype in
60 author)
61 addcol=$col
62 fkey="${fkey}, foreign key($col) references user(name) on delete cascade on update cascade"
63 keytype=f # blogの場合はuserのほうがいい??
64 ;;
65 owner)
66 ;;
67 serial)
68 addcol=$addcol" varchar(20)" ;;
69 hidden)
70 continue ;;
71 user)
73 ;;
74 group)
75 esac
76 [ "$addcol" ] && cols="$cols${cols:+, }"$addcol
77 typevals="(\"/$tmain\", \"$col\", \"$keytype\", \"$objtype\")"
78 sq $db "replace into $ct values $typevals"
79 done
80 pk=${pkey:+", primary key($pkey)"}
81 uq=${uniq:+", unique($uniq)"}
82 create table $tmain "($cols$pk$uq$fkey)"
83 create table $ts "($pkey, key, type, val, bin blob, primary key($pkey, key)$fkey2)"
84 create table $tm "($pkey, key, type, val, bin blob, unique($pkey, key, val)$fkey2)"
85 )
86 }
88 create table par '(sessid text, var text, type text, val text, primary key(sessid, var, val) foreign key(sessid) references session(id) on update cascade on delete cascade);'
89 create table session '(id text primary key, expire text);'
90 create table cookie '(sessid text, var text, type text, val text, primary key(sessid, var) foreign key(sessid) references session(id) on update cascade on delete cascade);'
93 create_struct $formdir/user.def
94 create_struct $formdir/grp.def
95 create_struct $formdir/grp_mem.def
96 create_struct $formdir/grp_adm.def
97 create_struct $formdir/blog.def
98 create_struct $formdir/article.def
99 #### create_struct $formdir/diary.def
101 create table acclog "(user, tbl, rowid, time, \
102 primary key(user, tbl, rowid), \
103 foreign key(user) references user(name))"
105 gettblcols ${1:-grp}
106 echo -n s:; gettbl_s_cols ${1:-grp}
107 echo -n m:; gettbl_m_cols ${1:-grp}