From 394e6fc24283cc24d9dd928d07617573bb32811d Mon Sep 17 00:00:00 2001 From: Tilman Vogel Date: Thu, 30 Mar 2023 18:43:12 +0200 Subject: [PATCH] Support for double-quoted identifiers in queries --- src/select-query-parser.ts | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/src/select-query-parser.ts b/src/select-query-parser.ts index 5f8c5a74..f5c02fda 100644 --- a/src/select-query-parser.ts +++ b/src/select-query-parser.ts @@ -124,12 +124,39 @@ type ReadLettersHelper = string extend : [Acc, ''] /** - * Parses an identifier. + * Reads a consecutive sequence of more than 1 double-quoted letters, + * where letters are `[^"]`. + */ +type ReadQuotedLetters = string extends Input + ? GenericStringError + : Input extends `"${infer Remainder}` + ? ReadQuotedLettersHelper extends [`${infer Letters}`, `${infer Remainder}`] + ? Letters extends '' + ? ParserError<`Expected string at \`${Remainder}\``> + : [Letters, Remainder] + : ReadQuotedLettersHelper + : ParserError<`Not a double-quoted string at \`${Input}\``> + +type ReadQuotedLettersHelper = string extends Input + ? GenericStringError + : Input extends `${infer L}${infer Remainder}` + ? L extends '"' + ? [Acc, Remainder] + : ReadQuotedLettersHelper + : ParserError<`Missing closing double-quote in \`"${Acc}${Input}\``> + +/** + * Parses a (possibly double-quoted) identifier. * For now, identifiers are just sequences of more than 1 letter. - * - * TODO: allow for double quoted strings. */ -type ParseIdentifier = ReadLetters +type ParseIdentifier = ReadLetters extends [ + infer Name, + `${infer Remainder}` +] + ? [Name, `${Remainder}`] + : ReadQuotedLetters extends [infer Name, `${infer Remainder}`] + ? [Name, `${Remainder}`] + : ParserError<`No (possibly double-quoted) identifier at \`${Input}\``> /** * Parses a node.