@instawp/cli 0.0.1-beta.1 → 0.0.1-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/exec.js +26 -0
- package/dist/commands/exec.js.map +1 -1
- package/dist/commands/local.d.ts +2 -0
- package/dist/commands/local.js +694 -0
- package/dist/commands/local.js.map +1 -0
- package/dist/commands/login.js +23 -7
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/sites.js +190 -10
- package/dist/commands/sites.js.map +1 -1
- package/dist/commands/sync.js +2 -1
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/teams.js +52 -3
- package/dist/commands/teams.js.map +1 -1
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/api.js +6 -1
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/config.d.ts +10 -1
- package/dist/lib/config.js +47 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/local-env.d.ts +35 -0
- package/dist/lib/local-env.js +299 -0
- package/dist/lib/local-env.js.map +1 -0
- package/dist/lib/site-resolver.js +32 -11
- package/dist/lib/site-resolver.js.map +1 -1
- package/dist/lib/ssh-connection.d.ts +8 -0
- package/dist/lib/ssh-connection.js +26 -2
- package/dist/lib/ssh-connection.js.map +1 -1
- package/dist/lib/ssh-keys.js +12 -5
- package/dist/lib/ssh-keys.js.map +1 -1
- package/dist/types.d.ts +8 -0
- package/package.json +3 -2
- package/scripts/mysql2sqlite +289 -0
|
@@ -5,4 +5,12 @@ export declare function execViaSsh(conn: SshConnection, command: string): {
|
|
|
5
5
|
stderr: string;
|
|
6
6
|
exitCode: number;
|
|
7
7
|
};
|
|
8
|
+
/**
|
|
9
|
+
* Execute a command via SSH and stream stdout directly to a file.
|
|
10
|
+
* Useful for large outputs like database dumps.
|
|
11
|
+
*/
|
|
12
|
+
export declare function execViaSshToFile(conn: SshConnection, command: string, outputPath: string): {
|
|
13
|
+
exitCode: number;
|
|
14
|
+
stderr: string;
|
|
15
|
+
};
|
|
8
16
|
export declare function rsyncViaSsh(conn: SshConnection, source: string, dest: string, extraArgs: string[], dryRun: boolean, stream: boolean): number;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { spawnSync } from 'node:child_process';
|
|
2
2
|
import { homedir } from 'node:os';
|
|
3
3
|
import path from 'node:path';
|
|
4
|
-
import { existsSync, mkdirSync } from 'node:fs';
|
|
4
|
+
import { existsSync, mkdirSync, openSync, closeSync } from 'node:fs';
|
|
5
5
|
const KNOWN_HOSTS = path.join(homedir(), '.instawp', 'known_hosts');
|
|
6
6
|
function ensureKnownHosts() {
|
|
7
7
|
const dir = path.dirname(KNOWN_HOSTS);
|
|
@@ -41,11 +41,35 @@ export function execViaSsh(conn, command) {
|
|
|
41
41
|
exitCode: result.status ?? 1,
|
|
42
42
|
};
|
|
43
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Execute a command via SSH and stream stdout directly to a file.
|
|
46
|
+
* Useful for large outputs like database dumps.
|
|
47
|
+
*/
|
|
48
|
+
export function execViaSshToFile(conn, command, outputPath) {
|
|
49
|
+
ensureKnownHosts();
|
|
50
|
+
const fd = openSync(outputPath, 'w');
|
|
51
|
+
try {
|
|
52
|
+
const result = spawnSync('ssh', ['-T', ...sshArgs(conn), sshTarget(conn)], {
|
|
53
|
+
input: command + '\n',
|
|
54
|
+
stdio: ['pipe', fd, 'pipe'],
|
|
55
|
+
encoding: 'utf-8',
|
|
56
|
+
maxBuffer: 500 * 1024 * 1024, // 500MB
|
|
57
|
+
});
|
|
58
|
+
return {
|
|
59
|
+
exitCode: result.status ?? 1,
|
|
60
|
+
stderr: result.stderr || '',
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
closeSync(fd);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
44
67
|
export function rsyncViaSsh(conn, source, dest, extraArgs, dryRun, stream) {
|
|
45
68
|
ensureKnownHosts();
|
|
46
69
|
const sshCmd = `ssh -i ${conn.privateKeyPath} -p ${conn.port} -o StrictHostKeyChecking=accept-new -o UserKnownHostsFile=${KNOWN_HOSTS}`;
|
|
47
70
|
const args = [
|
|
48
|
-
'-
|
|
71
|
+
'-arz',
|
|
72
|
+
'--itemize-changes',
|
|
49
73
|
'--exclude=.git',
|
|
50
74
|
'--exclude=node_modules',
|
|
51
75
|
'--exclude=.DS_Store',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssh-connection.js","sourceRoot":"","sources":["../../src/lib/ssh-connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"ssh-connection.js","sourceRoot":"","sources":["../../src/lib/ssh-connection.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/ssh-keys.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { existsSync, readFileSync, mkdirSync } from 'node:fs';
|
|
1
|
+
import { existsSync, readFileSync, mkdirSync, unlinkSync } from 'node:fs';
|
|
2
2
|
import { execSync } from 'node:child_process';
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
4
|
import path from 'node:path';
|
|
5
5
|
import { getClient } from './api.js';
|
|
6
6
|
import { getSshCache, setSshCache, clearSshCache } from './config.js';
|
|
7
|
-
import { error, spinner } from './output.js';
|
|
7
|
+
import { error, info, spinner } from './output.js';
|
|
8
8
|
const INSTAWP_DIR = path.join(homedir(), '.instawp');
|
|
9
9
|
const CLI_KEY_PATH = path.join(INSTAWP_DIR, 'cli_key');
|
|
10
10
|
const CLI_KEY_PUB_PATH = CLI_KEY_PATH + '.pub';
|
|
@@ -40,15 +40,22 @@ function parseKeyMaterial(pubContent) {
|
|
|
40
40
|
}
|
|
41
41
|
function generateCliKey() {
|
|
42
42
|
ensureInstawpDir();
|
|
43
|
+
// Remove old key if it exists (so ssh-keygen doesn't prompt to overwrite)
|
|
43
44
|
try {
|
|
44
|
-
|
|
45
|
-
|
|
45
|
+
if (existsSync(CLI_KEY_PATH))
|
|
46
|
+
unlinkSync(CLI_KEY_PATH);
|
|
47
|
+
if (existsSync(CLI_KEY_PUB_PATH))
|
|
48
|
+
unlinkSync(CLI_KEY_PUB_PATH);
|
|
49
|
+
}
|
|
50
|
+
catch { /* ignore */ }
|
|
51
|
+
try {
|
|
52
|
+
execSync(`ssh-keygen -t rsa -b 4096 -f "${CLI_KEY_PATH}" -N "" -C "instawp-cli"`, {
|
|
46
53
|
stdio: 'ignore',
|
|
47
|
-
shell: '/bin/sh',
|
|
48
54
|
});
|
|
49
55
|
}
|
|
50
56
|
catch {
|
|
51
57
|
error('Failed to generate SSH key. Ensure ssh-keygen (OpenSSH) is installed.');
|
|
58
|
+
info('Windows: Settings → Apps → Optional Features → OpenSSH Client');
|
|
52
59
|
process.exit(1);
|
|
53
60
|
}
|
|
54
61
|
return {
|
package/dist/lib/ssh-keys.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssh-keys.js","sourceRoot":"","sources":["../../src/lib/ssh-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"ssh-keys.js","sourceRoot":"","sources":["../../src/lib/ssh-keys.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@instawp/cli",
|
|
3
|
-
"version": "0.0.1-beta.
|
|
3
|
+
"version": "0.0.1-beta.3",
|
|
4
4
|
"description": "InstaWP CLI - Create and manage WordPress sites from the terminal",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
},
|
|
9
9
|
"files": [
|
|
10
10
|
"dist",
|
|
11
|
-
"!dist/__tests__"
|
|
11
|
+
"!dist/__tests__",
|
|
12
|
+
"scripts/mysql2sqlite"
|
|
12
13
|
],
|
|
13
14
|
"scripts": {
|
|
14
15
|
"build": "tsc",
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
#!/usr/bin/awk -f
|
|
2
|
+
|
|
3
|
+
# Authors: @esperlu, @artemyk, @gkuenning, @dumblob
|
|
4
|
+
|
|
5
|
+
# FIXME detect empty input file and issue a warning
|
|
6
|
+
|
|
7
|
+
function printerr( s ){ print s | "cat >&2" }
|
|
8
|
+
|
|
9
|
+
BEGIN {
|
|
10
|
+
if( ARGC != 2 ){
|
|
11
|
+
printerr( \
|
|
12
|
+
"USAGE:\n"\
|
|
13
|
+
" mysql2sqlite dump_mysql.sql > dump_sqlite3.sql\n" \
|
|
14
|
+
" OR\n" \
|
|
15
|
+
" mysql2sqlite dump_mysql.sql | sqlite3 sqlite.db\n" \
|
|
16
|
+
"\n" \
|
|
17
|
+
"NOTES:\n" \
|
|
18
|
+
" Dash in filename is not supported, because dash (-) means stdin." )
|
|
19
|
+
no_END = 1
|
|
20
|
+
exit 1
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
# Find INT_MAX supported by both this AWK (usually an ISO C signed int)
|
|
24
|
+
# and SQlite.
|
|
25
|
+
# On non-8bit-based architectures, the additional bits are safely ignored.
|
|
26
|
+
|
|
27
|
+
# 8bit (lower precision should not exist)
|
|
28
|
+
s="127"
|
|
29
|
+
# "63" + 0 avoids potential parser misbehavior
|
|
30
|
+
if( (s + 0) "" == s ){ INT_MAX_HALF = "63" + 0 }
|
|
31
|
+
# 16bit
|
|
32
|
+
s="32767"
|
|
33
|
+
if( (s + 0) "" == s ){ INT_MAX_HALF = "16383" + 0 }
|
|
34
|
+
# 32bit
|
|
35
|
+
s="2147483647"
|
|
36
|
+
if( (s + 0) "" == s ){ INT_MAX_HALF = "1073741823" + 0 }
|
|
37
|
+
# 64bit (as INTEGER in SQlite3)
|
|
38
|
+
s="9223372036854775807"
|
|
39
|
+
if( (s + 0) "" == s ){ INT_MAX_HALF = "4611686018427387904" + 0 }
|
|
40
|
+
# # 128bit
|
|
41
|
+
# s="170141183460469231731687303715884105728"
|
|
42
|
+
# if( (s + 0) "" == s ){ INT_MAX_HALF = "85070591730234615865843651857942052864" + 0 }
|
|
43
|
+
# # 256bit
|
|
44
|
+
# s="57896044618658097711785492504343953926634992332820282019728792003956564819968"
|
|
45
|
+
# if( (s + 0) "" == s ){ INT_MAX_HALF = "28948022309329048855892746252171976963317496166410141009864396001978282409984" + 0 }
|
|
46
|
+
# # 512bit
|
|
47
|
+
# s="6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048"
|
|
48
|
+
# if( (s + 0) "" == s ){ INT_MAX_HALF = "3351951982485649274893506249551461531869841455148098344430890360930441007518386744200468574541725856922507964546621512713438470702986642486608412251521024" + 0 }
|
|
49
|
+
# # 1024bit
|
|
50
|
+
# s="89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608"
|
|
51
|
+
# if( (s + 0) "" == s ){ INT_MAX_HALF = "44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304" + 0 }
|
|
52
|
+
# # higher precision probably not needed
|
|
53
|
+
|
|
54
|
+
FS=",$"
|
|
55
|
+
print "PRAGMA synchronous = OFF;"
|
|
56
|
+
print "PRAGMA journal_mode = MEMORY;"
|
|
57
|
+
print "BEGIN TRANSACTION;"
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
# historically 3 spaces separate non-argument local variables
|
|
61
|
+
function bit_to_int( str_bit, powtwo, i, res, bit, overflow ){
|
|
62
|
+
powtwo = 1
|
|
63
|
+
overflow = 0
|
|
64
|
+
# 011101 = 1*2^0 + 0*2^1 + 1*2^2 ...
|
|
65
|
+
for( i = length( str_bit ); i > 0; --i ){
|
|
66
|
+
bit = substr( str_bit, i, 1 )
|
|
67
|
+
if( overflow || ( bit == 1 && res > INT_MAX_HALF ) ){
|
|
68
|
+
printerr( \
|
|
69
|
+
NR ": WARN Bit field overflow, number truncated (LSBs saved, MSBs ignored)." )
|
|
70
|
+
break
|
|
71
|
+
}
|
|
72
|
+
res = res + bit * powtwo
|
|
73
|
+
# no warning here as it might be the last iteration
|
|
74
|
+
if( powtwo > INT_MAX_HALF ){ overflow = 1; continue }
|
|
75
|
+
powtwo = powtwo * 2
|
|
76
|
+
}
|
|
77
|
+
return res
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
# CREATE TRIGGER statements have funny commenting. Remember we are in trigger.
|
|
81
|
+
/^\/\*.*(CREATE.*TRIGGER|create.*trigger)/ {
|
|
82
|
+
gsub( /^.*(TRIGGER|trigger)/, "CREATE TRIGGER" )
|
|
83
|
+
print
|
|
84
|
+
inTrigger = 1
|
|
85
|
+
next
|
|
86
|
+
}
|
|
87
|
+
# The end of CREATE TRIGGER has a stray comment terminator
|
|
88
|
+
/(END|end) \*\/;;/ { gsub( /\*\//, "" ); print; inTrigger = 0; next }
|
|
89
|
+
# The rest of triggers just get passed through
|
|
90
|
+
inTrigger != 0 { print; next }
|
|
91
|
+
|
|
92
|
+
# CREATE VIEW looks like a TABLE in comments
|
|
93
|
+
/^\/\*.*(CREATE.*TABLE|create.*table)/ {
|
|
94
|
+
inView = 1
|
|
95
|
+
next
|
|
96
|
+
}
|
|
97
|
+
# end of CREATE VIEW
|
|
98
|
+
/^(\).*(ENGINE|engine).*\*\/;)/ {
|
|
99
|
+
inView = 0
|
|
100
|
+
next
|
|
101
|
+
}
|
|
102
|
+
# content of CREATE VIEW
|
|
103
|
+
inView != 0 { next }
|
|
104
|
+
|
|
105
|
+
# skip comments
|
|
106
|
+
/^\/\*/ { next }
|
|
107
|
+
|
|
108
|
+
# skip PARTITION statements
|
|
109
|
+
/^ *[(]?(PARTITION|partition) +[^ ]+/ { next }
|
|
110
|
+
|
|
111
|
+
# print all INSERT lines
|
|
112
|
+
( /^ *\(/ && /\) *[,;] *$/ ) || /^(INSERT|insert|REPLACE|replace)/ {
|
|
113
|
+
prev = ""
|
|
114
|
+
|
|
115
|
+
# first replace \\ by \_ that mysqldump never generates to deal with
|
|
116
|
+
# sequnces like \\n that should be translated into \n, not \<LF>.
|
|
117
|
+
# After we convert all escapes we replace \_ by backslashes.
|
|
118
|
+
gsub( /\\\\/, "\\_" )
|
|
119
|
+
|
|
120
|
+
# single quotes are escaped by another single quote
|
|
121
|
+
gsub( /\\'/, "''" )
|
|
122
|
+
gsub( /\\n/, "\n" )
|
|
123
|
+
gsub( /\\r/, "\r" )
|
|
124
|
+
gsub( /\\"/, "\"" )
|
|
125
|
+
gsub( /\\\032/, "\032" ) # substitute char
|
|
126
|
+
|
|
127
|
+
gsub( /\\_/, "\\" )
|
|
128
|
+
|
|
129
|
+
# sqlite3 is limited to 16 significant digits of precision
|
|
130
|
+
while( match( $0, /0x[0-9a-fA-F]{17}/ ) ){
|
|
131
|
+
hexIssue = 1
|
|
132
|
+
sub( /0x[0-9a-fA-F]+/, substr( $0, RSTART, RLENGTH-1 ), $0 )
|
|
133
|
+
}
|
|
134
|
+
if( hexIssue ){
|
|
135
|
+
printerr( \
|
|
136
|
+
NR ": WARN Hex number trimmed (length longer than 16 chars)." )
|
|
137
|
+
hexIssue = 0
|
|
138
|
+
}
|
|
139
|
+
print
|
|
140
|
+
next
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
# CREATE DATABASE is not supported
|
|
144
|
+
/^(CREATE DATABASE|create database)/ { next }
|
|
145
|
+
|
|
146
|
+
# print the CREATE line as is and capture the table name
|
|
147
|
+
/^(CREATE|create)/ {
|
|
148
|
+
if( $0 ~ /IF NOT EXISTS|if not exists/ || $0 ~ /TEMPORARY|temporary/ ){
|
|
149
|
+
caseIssue = 1
|
|
150
|
+
printerr( \
|
|
151
|
+
NR ": WARN Potential case sensitivity issues with table/column naming\n" \
|
|
152
|
+
" (see INFO at the end)." )
|
|
153
|
+
}
|
|
154
|
+
if( match( $0, /`[^`]+/ ) ){
|
|
155
|
+
tableName = substr( $0, RSTART+1, RLENGTH-1 )
|
|
156
|
+
}
|
|
157
|
+
aInc = 0
|
|
158
|
+
prev = ""
|
|
159
|
+
firstInTable = 1
|
|
160
|
+
print
|
|
161
|
+
next
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
# Replace `FULLTEXT KEY` (probably other `XXXXX KEY`)
|
|
165
|
+
/^ (FULLTEXT KEY|fulltext key)/ { gsub( /[A-Za-z ]+(KEY|key)/, " KEY" ) }
|
|
166
|
+
|
|
167
|
+
# Get rid of field lengths in KEY lines
|
|
168
|
+
/ (PRIMARY |primary )?(KEY|key)/ { gsub( /\([0-9]+\)/, "" ) }
|
|
169
|
+
|
|
170
|
+
aInc == 1 && /PRIMARY KEY|primary key/ { next }
|
|
171
|
+
|
|
172
|
+
# Replace COLLATE xxx_xxxx_xx statements with COLLATE BINARY
|
|
173
|
+
/ (COLLATE|collate) [a-z0-9_]*/ { gsub( /(COLLATE|collate) [a-z0-9_]*/, "COLLATE BINARY" ) }
|
|
174
|
+
|
|
175
|
+
# Print all fields definition lines except the `KEY` lines.
|
|
176
|
+
/^ / && !/^( (KEY|key)|\);)/ {
|
|
177
|
+
if( match( $0, /[^"`]AUTO_INCREMENT|auto_increment[^"`]/) ){
|
|
178
|
+
aInc = 1
|
|
179
|
+
gsub( /AUTO_INCREMENT|auto_increment/, "PRIMARY KEY AUTOINCREMENT" )
|
|
180
|
+
}
|
|
181
|
+
gsub( /(UNIQUE KEY|unique key) (`.*`|".*") /, "UNIQUE " )
|
|
182
|
+
gsub( /(CHARACTER SET|character set) [^ ]+[ ,]/, "" )
|
|
183
|
+
# FIXME
|
|
184
|
+
# CREATE TRIGGER [UpdateLastTime]
|
|
185
|
+
# AFTER UPDATE
|
|
186
|
+
# ON Package
|
|
187
|
+
# FOR EACH ROW
|
|
188
|
+
# BEGIN
|
|
189
|
+
# UPDATE Package SET LastUpdate = CURRENT_TIMESTAMP WHERE ActionId = old.ActionId;
|
|
190
|
+
# END
|
|
191
|
+
gsub( /(ON|on) (UPDATE|update) (CURRENT_TIMESTAMP|current_timestamp)(\(\))?/, "" )
|
|
192
|
+
gsub( /(DEFAULT|default) (CURRENT_TIMESTAMP|current_timestamp)(\(\))?/, "DEFAULT current_timestamp")
|
|
193
|
+
gsub( /(COLLATE|collate) [^ ]+ /, "" )
|
|
194
|
+
gsub( /(ENUM|enum)[^)]+\)/, "text " )
|
|
195
|
+
gsub( /(SET|set)\([^)]+\)/, "text " )
|
|
196
|
+
gsub( /UNSIGNED|unsigned/, "" )
|
|
197
|
+
gsub( /_utf8mb3/, "" )
|
|
198
|
+
gsub( /` [^ ]*(INT|int|BIT|bit)[^ ]*/, "` integer" )
|
|
199
|
+
gsub( /" [^ ]*(INT|int|BIT|bit)[^ ]*/, "\" integer" )
|
|
200
|
+
ere_bit_field = "[bB]'[10]+'"
|
|
201
|
+
if( match($0, ere_bit_field) ){
|
|
202
|
+
sub( ere_bit_field, bit_to_int( substr( $0, RSTART +2, RLENGTH -2 -1 ) ) )
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
# remove USING BTREE and other suffixes for USING, for example: "UNIQUE KEY
|
|
206
|
+
# `hostname_domain` (`hostname`,`domain`) USING BTREE,"
|
|
207
|
+
gsub( / USING [^, ]+/, "" )
|
|
208
|
+
|
|
209
|
+
# field comments are not supported
|
|
210
|
+
gsub( / (COMMENT|comment).+$/, "" )
|
|
211
|
+
# Get commas off end of line
|
|
212
|
+
gsub( /,.?$/, "" )
|
|
213
|
+
if( prev ){
|
|
214
|
+
if( firstInTable ){
|
|
215
|
+
print prev
|
|
216
|
+
firstInTable = 0
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
print "," prev
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
# FIXME check if this is correct in all cases
|
|
224
|
+
if( match( $1,
|
|
225
|
+
/(CONSTRAINT|constraint) ["].*["] (FOREIGN KEY|foreign key)/ ) ){
|
|
226
|
+
print ","
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
prev = $1
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/ ENGINE| engine/ {
|
|
233
|
+
if( prev ){
|
|
234
|
+
if( firstInTable ){
|
|
235
|
+
print prev
|
|
236
|
+
firstInTable = 0
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
print "," prev
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
prev=""
|
|
243
|
+
print ");"
|
|
244
|
+
next
|
|
245
|
+
}
|
|
246
|
+
# `KEY` lines are extracted from the `CREATE` block and stored in array for later print
|
|
247
|
+
# in a separate `CREATE KEY` command. The index name is prefixed by the table name to
|
|
248
|
+
# avoid a sqlite error for duplicate index name.
|
|
249
|
+
/^( (KEY|key)|\);)/ {
|
|
250
|
+
if( prev ){
|
|
251
|
+
if( firstInTable ){
|
|
252
|
+
print prev
|
|
253
|
+
firstInTable = 0
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
print "," prev
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
prev = ""
|
|
260
|
+
if( $0 == ");" ){
|
|
261
|
+
print
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
if( match( $0, /`[^`]+/ ) ){
|
|
265
|
+
indexName = substr( $0, RSTART+1, RLENGTH-1 )
|
|
266
|
+
}
|
|
267
|
+
if( match( $0, /\([^()]+/ ) ){
|
|
268
|
+
indexKey = substr( $0, RSTART+1, RLENGTH-1 )
|
|
269
|
+
}
|
|
270
|
+
# idx_ prefix to avoid name clashes (they really happen!)
|
|
271
|
+
key[tableName] = key[tableName] "CREATE INDEX \"idx_" \
|
|
272
|
+
tableName "_" indexName "\" ON \"" tableName "\" (" indexKey ");\n"
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
END {
|
|
277
|
+
if( no_END ){ exit 1}
|
|
278
|
+
# print all KEY creation lines.
|
|
279
|
+
for( table in key ){ printf key[table] }
|
|
280
|
+
|
|
281
|
+
print "END TRANSACTION;"
|
|
282
|
+
|
|
283
|
+
if( caseIssue ){
|
|
284
|
+
printerr( \
|
|
285
|
+
"INFO Pure sqlite identifiers are case insensitive (even if quoted\n" \
|
|
286
|
+
" or if ASCII) and doesnt cross-check TABLE and TEMPORARY TABLE\n" \
|
|
287
|
+
" identifiers. Thus expect errors like \"table T has no column named F\".")
|
|
288
|
+
}
|
|
289
|
+
}
|