Skip to content

Commit 403d319

Browse files
committed
Wrap AUTO_INCREMENT correlated subquery in MAX aggregate
1 parent 909fd69 commit 403d319

1 file changed

Lines changed: 60 additions & 0 deletions

File tree

.github/workflows/phpunit-tests-turso.yml

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1199,6 +1199,66 @@ jobs:
11991199
open(path, 'w').write(src)
12001200
print('patched hex-literal alias force under Turso')
12011201
1202+
# 18. Rewrite AUTO_INCREMENT subquery in information_schema.tables
1203+
# from a correlated scalar subquery (which Turso evaluates
1204+
# incorrectly for some rows) to a plain SELECT with a correlated
1205+
# SELECT aggregated via MAX so the result is stable per outer
1206+
# row. Both testInformationSchemaTablesFilterByAutoIncrement
1207+
# and testCreateTableSetAutoIncrement rely on this returning
1208+
# NULL for tables without auto_increment columns.
1209+
src = open(path).read()
1210+
old = (
1211+
"\t\t\t\t\t$auto_increment_subquery = sprintf(\n"
1212+
"\t\t\t\t\t\t\"(\n"
1213+
"\t\t\t\t\t\t\tSELECT COALESCE(s.seq + 1, 1)\n"
1214+
"\t\t\t\t\t\t\tFROM %s AS c\n"
1215+
"\t\t\t\t\t\t\t%s\n"
1216+
"\t\t\t\t\t\t\tWHERE c.extra = 'auto_increment'\n"
1217+
"\t\t\t\t\t\t\tAND c.table_schema = %s.table_schema\n"
1218+
"\t\t\t\t\t\t\tAND c.table_name = %s.table_name\n"
1219+
"\t\t\t\t\t\t)\",\n"
1220+
)
1221+
new = (
1222+
"\t\t\t\t\t$auto_increment_subquery = sprintf(\n"
1223+
"\t\t\t\t\t\t\"(\n"
1224+
"\t\t\t\t\t\t\tSELECT MAX(COALESCE(s.seq + 1, 1))\n"
1225+
"\t\t\t\t\t\t\tFROM %s AS c\n"
1226+
"\t\t\t\t\t\t\t%s\n"
1227+
"\t\t\t\t\t\t\tWHERE c.extra = 'auto_increment'\n"
1228+
"\t\t\t\t\t\t\tAND c.table_schema = %s.table_schema\n"
1229+
"\t\t\t\t\t\t\tAND c.table_name = %s.table_name\n"
1230+
"\t\t\t\t\t\t)\",\n"
1231+
)
1232+
assert old in src, 'AUTO_INCREMENT subquery (tables view) not found'
1233+
src = src.replace(old, new, 1)
1234+
# Also the SHOW TABLE STATUS variant at line 3018.
1235+
old2 = (
1236+
"\t\t$auto_increment_subquery = sprintf(\n"
1237+
"\t\t\t\"(\n"
1238+
"\t\t\t\tSELECT COALESCE(s.seq + 1, 1)\n"
1239+
"\t\t\t\tFROM %s AS c\n"
1240+
"\t\t\t\t%s\n"
1241+
"\t\t\t\tWHERE c.extra = 'auto_increment'\n"
1242+
"\t\t\t\tAND c.table_schema = t.table_schema\n"
1243+
"\t\t\t\tAND c.table_name = t.table_name\n"
1244+
"\t\t\t)\",\n"
1245+
)
1246+
new2 = (
1247+
"\t\t$auto_increment_subquery = sprintf(\n"
1248+
"\t\t\t\"(\n"
1249+
"\t\t\t\tSELECT MAX(COALESCE(s.seq + 1, 1))\n"
1250+
"\t\t\t\tFROM %s AS c\n"
1251+
"\t\t\t\t%s\n"
1252+
"\t\t\t\tWHERE c.extra = 'auto_increment'\n"
1253+
"\t\t\t\tAND c.table_schema = t.table_schema\n"
1254+
"\t\t\t\tAND c.table_name = t.table_name\n"
1255+
"\t\t\t)\",\n"
1256+
)
1257+
assert old2 in src, 'AUTO_INCREMENT subquery (show status) not found'
1258+
src = src.replace(old2, new2, 1)
1259+
open(path, 'w').write(src)
1260+
print('patched AUTO_INCREMENT correlated subquery with MAX aggregate')
1261+
12021262
# 10. CHECK TABLE on a missing table on real SQLite raises from
12031263
# `PRAGMA integrity_check(<tbl>)`; on Turso the PRAGMA is a
12041264
# no-op for unknown tables, so testCheckTable sees status=OK

0 commit comments

Comments
 (0)