spine-framework 0.2.3 → 0.2.4
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.
|
@@ -99,10 +99,51 @@ async function migrateCommand(options: MigrateOptions): Promise<void> {
|
|
|
99
99
|
// Running the whole file as one query string causes pg to abort the entire
|
|
100
100
|
// batch on the first error, preventing PL/pgSQL EXCEPTION handlers from
|
|
101
101
|
// catching expected errors like "relation already exists".
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
102
|
+
// MUST preserve dollar-quoted blocks ($$ ... $$) which contain semicolons.
|
|
103
|
+
const statements: string[] = []
|
|
104
|
+
let current = ''
|
|
105
|
+
let inDollarQuote = false
|
|
106
|
+
let dollarTag = ''
|
|
107
|
+
let i = 0
|
|
108
|
+
while (i < sql.length) {
|
|
109
|
+
if (!inDollarQuote) {
|
|
110
|
+
// Check for start of dollar quote: $tag$ or $$
|
|
111
|
+
const dollarMatch = sql.slice(i).match(/^(\$[A-Za-z_]*\$)/)
|
|
112
|
+
if (dollarMatch) {
|
|
113
|
+
inDollarQuote = true
|
|
114
|
+
dollarTag = dollarMatch[1]
|
|
115
|
+
current += dollarMatch[1]
|
|
116
|
+
i += dollarMatch[1].length
|
|
117
|
+
continue
|
|
118
|
+
}
|
|
119
|
+
// Check for statement terminator
|
|
120
|
+
if (sql[i] === ';') {
|
|
121
|
+
const stmt = current.trim()
|
|
122
|
+
if (stmt.length > 0 && !stmt.startsWith('--')) {
|
|
123
|
+
statements.push(stmt)
|
|
124
|
+
}
|
|
125
|
+
current = ''
|
|
126
|
+
i++
|
|
127
|
+
continue
|
|
128
|
+
}
|
|
129
|
+
} else {
|
|
130
|
+
// Check for end of dollar quote
|
|
131
|
+
const endTag = dollarTag
|
|
132
|
+
if (sql.slice(i, i + endTag.length) === endTag) {
|
|
133
|
+
inDollarQuote = false
|
|
134
|
+
current += endTag
|
|
135
|
+
i += endTag.length
|
|
136
|
+
continue
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
current += sql[i]
|
|
140
|
+
i++
|
|
141
|
+
}
|
|
142
|
+
// Don't forget the last statement
|
|
143
|
+
const last = current.trim()
|
|
144
|
+
if (last.length > 0 && !last.startsWith('--')) {
|
|
145
|
+
statements.push(last)
|
|
146
|
+
}
|
|
106
147
|
|
|
107
148
|
try {
|
|
108
149
|
for (const stmt of statements) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../.framework/cli/commands/migrate.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../.framework/cli/commands/migrate.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA4JxC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,QAevD"}
|