Mercurial > hgrepos > hgweb.cgi > s4
comparison scripts/migrate-grp.sh @ 1006:4bc9494c00ff draft
Add clean-orphaned.sql migrate-grp.sh
author | HIROSE Yuuji <yuuji@gentei.org> |
---|---|
date | Sun, 05 Mar 2023 15:12:17 +0859 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1005:c2fc7a148d2c | 1006:4bc9494c00ff |
---|---|
1 #!/bin/sh | |
2 # ./migrate-grp src-conf dst-conf GrpIDs | |
3 # eg) ./sitemoving.rb s4-config.sh s4-world-second.sh 8 | |
4 | |
5 [ -f $1 ] && . ./$1 | |
6 [ -f $2 ] && . ./$2 | |
7 . `dirname $1`/s4-funcs.sh | |
8 | |
9 dstdb=$DB | |
10 | |
11 echo db=$db dstdb=$dstdb masterdb=$S4MASTERDB URL=$URL M_URL=$S4MASTERURL | |
12 | |
13 shift 2 | |
14 | |
15 query "ATTACH DATABASE \"$S4MASTERDB\" AS src;" || abort "Cannot attach db #{dstdb}" | |
16 for grid; do | |
17 grid=$((0 + $grid)) | |
18 echo $grid | |
19 gnamesql="(SELECT gname FROM src.grp WHERE rowid=$grid)" | |
20 echo "Copying $grid..." | |
21 query "BEGIN;" | |
22 query "REPLACE INTO main.grp SELECT * FROM src.grp WHERE rowid=$grid;" | |
23 for tbl in grp_s grp_m grp_mem grp_mem_s grp_mem_m \ | |
24 grp_adm grp_adm_s grp_adm_m; do | |
25 query "REPLACE INTO main.$tbl SELECT * FROM src.$tbl | |
26 WHERE gname=$gnamesql;" | |
27 done | |
28 blogs=`query "SELECT group_concat(\"'\"||id||\"'\", ',') | |
29 FROM src.blog_s WHERE key='owner' AND val=$gnamesql;"` | |
30 echo blogs=$blogs | |
31 for tbl in blog blog_s blog_m; do | |
32 query <<-EOF | |
33 REPLACE INTO main.$tbl | |
34 SELECT * FROM src.$tbl | |
35 WHERE id IN ($blogs); | |
36 EOF | |
37 done | |
38 for blogid in $blogs; do | |
39 for tbl in article article_s article_m; do | |
40 query <<-EOF | |
41 REPLACE INTO main.$tbl | |
42 SELECT * FROM src.$tbl | |
43 WHERE id IN (SELECT id FROM src.article WHERE blogid IN ($blogs)); | |
44 EOF | |
45 done | |
46 done | |
47 query "END;" | |
48 done | |
49 exit | |
50 grid = g.to_i | |
51 # Copy group itself | |
52 gname = db.execute("SELECT gname FROM main.grp WHERE rowid=?", grid)[0][0] | |
53 r = db.execute("SELECT gname FROM dst.grp WHERE gname=?", gname) | |
54 if r[0] then | |
55 STDERR.printf("Skipping existing group %s\n", r[0][0]) | |
56 ####### next | |
57 end | |
58 printf("Copying group %s...\n", gname) | |
59 db.execute("BEGIN;"); | |
60 db.execute( | |
61 'REPLACE INTO dst.grp SELECT * FROM main.grp WHERE rowid=?', grid) | |
62 for tbl in %w(grp_s grp_m grp_mem grp_mem_s grp_mem_m | |
63 grp_adm grp_adm_s grp_adm_m) | |
64 db.execute( | |
65 "REPLACE INTO dst.#{tbl} | |
66 SELECT * FROM main.#{tbl} WHERE gname=?", gname) | |
67 end | |
68 ## Copy articles | |
69 db.execute("SELECT id FROM blog_s WHERE key='owner' AND val=?", | |
70 gname) do |row| | |
71 blogid = row[0] | |
72 for tbl in %w(blog blog_s blog_m) | |
73 db.execute( | |
74 "REPLACE INTO dst.#{tbl} | |
75 SELECT * FROM main.#{tbl} WHERE id=?", blogid) | |
76 db.execute( | |
77 "SELECT id FROM article WHERE blogid=?", blogid) do |article| | |
78 aid = article[0] | |
79 for atbl in %W(article article_m) | |
80 db.execute( | |
81 "REPLACE INTO dst.#{atbl} | |
82 SELECT * FROM main.#{atbl} WHERE id=?", aid) | |
83 end | |
84 db.execute( | |
85 "SELECT id, type, key, val, bin FROM article_s WHERE id=?", | |
86 aid) do |a| | |
87 db.execute("REPLACE INTO dst.article_s VALUES(?, ?, ?, ?, ?)", | |
88 a[0], a[1], a[2], | |
89 a[3].gsub(srcurl, dsturl), | |
90 a[4]) | |
91 end | |
92 end | |
93 end | |
94 end | |
95 db.execute("END;"); | |
96 | |
97 end | |
98 puts("Done.") |