s4

annotate se-init.sh @ 0:b8a890828283

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