Skip to content

Commit 0cdbb05

Browse files
authored
Merge pull request #537 from dolthub/fix/reject-custom-collation-index
Reject indexes with custom collations
2 parents 48f36e9 + 380963d commit 0cdbb05

2 files changed

Lines changed: 66 additions & 0 deletions

File tree

src/build.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4350,6 +4350,18 @@ void sqlite3CreateIndex(
43504350
goto exit_create_index;
43514351
}
43524352
pIndex->azColl[i] = zColl;
4353+
#ifdef DOLTLITE_PROLLY
4354+
/* Prolly-tree sort keys only support BINARY, NOCASE, and RTRIM.
4355+
** Reject indexes on columns with user-defined collations — they
4356+
** would produce wrong results on index lookups. */
4357+
if( sqlite3StrICmp(zColl, "BINARY")!=0
4358+
&& sqlite3StrICmp(zColl, "NOCASE")!=0
4359+
&& sqlite3StrICmp(zColl, "RTRIM")!=0 ){
4360+
sqlite3ErrorMsg(pParse,
4361+
"doltlite does not support indexes with custom collation '%s'", zColl);
4362+
goto exit_create_index;
4363+
}
4364+
#endif
43534365
requestedSortOrder = pListItem->fg.sortFlags & sortOrderMask;
43544366
pIndex->aSortOrder[i] = (u8)requestedSortOrder;
43554367
}

test/known_testfixture_divergences.txt

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,3 +315,57 @@ crash7 crash7-2.17.1
315315
crash7 crash7-2.18.1
316316
crash7 crash7-2.19.1
317317
crash7 crash7-2.20.1
318+
# Custom collation indexes rejected: doltlite's prolly-tree sort keys
319+
# only support BINARY, NOCASE, and RTRIM. CREATE INDEX with a custom
320+
# collation now errors rather than silently producing wrong results.
321+
enc enc-11.1
322+
collate3 collate3-1.6.1
323+
collate3 collate3-1.6.3
324+
collate3 collate3-1.6.4
325+
collate3 collate3-1.7.1
326+
collate3 collate3-1.7.3
327+
collate3 collate3-1.7.4
328+
collate3 collate3-3.0
329+
collate3 collate3-3.1
330+
collate3 collate3-3.2
331+
collate3 collate3-3.4
332+
collate3 collate3-3.5
333+
collate3 collate3-3.8
334+
collate3 collate3-3.10
335+
collate3 collate3-3.11
336+
collate3 collate3-3.12
337+
collate3 collate3-3.13
338+
collate3 collate3-3.14
339+
collate3 collate3-4.6
340+
collate4 collate4-1.1.0
341+
collate4 collate4-1.1.4
342+
collate4 collate4-1.1.5
343+
collate4 collate4-1.1.21
344+
collate4 collate4-1.1.24
345+
collate4 collate4-1.1.27
346+
collate4 collate4-1.1.30
347+
collate4 collate4-1.2.0
348+
collate4 collate4-1.2.1
349+
collate4 collate4-1.2.2
350+
collate4 collate4-1.2.4
351+
collate4 collate4-1.2.6
352+
collate4 collate4-1.2.14
353+
collate4 collate4-1.2.17
354+
collate4 collate4-1.2.19
355+
collate4 collate4-1.2.21
356+
collate4 collate4-1.2.24
357+
collate4 collate4-1.2.25
358+
collate4 collate4-2.1.4
359+
collate4 collate4-2.1.5
360+
collate4 collate4-2.1.7
361+
collate4 collate4-2.1.8
362+
collate4 collate4-2.1.9
363+
collate4 collate4-2.2.1b
364+
collate4 collate4-2.2.2
365+
collate4 collate4-4.3
366+
collate4 collate4-4.4
367+
collate4 collate4-4.5
368+
select9 select9-2.1.1 # CREATE INDEX with COLLATE REVERSE
369+
select9 select9-2.X
370+
select9 select9-3.1 # depends on index dropped in select9-2.X
371+
select9 select9-4.1

0 commit comments

Comments
 (0)