diff --git a/MetadataManager/MetadataColumns.cs b/MetadataManager/MetadataColumns.cs index 133cbdf..d3b4ffc 100644 --- a/MetadataManager/MetadataColumns.cs +++ b/MetadataManager/MetadataColumns.cs @@ -25,6 +25,11 @@ public MetadataColumn(int columnId, int tableId, string columnName, ColumnInfo c this.ColumnName = columnName; this.ColumnType = columnInfo; } + + public MetadataColumn SetNewColumnPosition(int columnId) + { + return new MetadataColumn(columnId, this.TableId, this.ColumnName, this.ColumnType); + } } /// diff --git a/ParserLexerFSharp/Sql.fs b/ParserLexerFSharp/Sql.fs index b89b905..b84cff2 100644 --- a/ParserLexerFSharp/Sql.fs +++ b/ParserLexerFSharp/Sql.fs @@ -57,6 +57,7 @@ and sqlStatementOrId = | FileSystemProvider of value // Subquery + chunksize in seconds | VideoChunkProviderSubquery of sqlStatement * int + | VideoImageProviderSubquery of sqlStatement * int * int type columntype = IntCType | StringCType | DoubleCType // columntype + rep count + name. diff --git a/ParserLexerFSharp/SqlLexer.fs b/ParserLexerFSharp/SqlLexer.fs index 31b1b3e..0d55c5b 100644 --- a/ParserLexerFSharp/SqlLexer.fs +++ b/ParserLexerFSharp/SqlLexer.fs @@ -20,6 +20,7 @@ let keywords = "FROM", FROM; "FILESYSTEM", FILESYSTEM; "VIDEO_CHUNKER", VIDEO_CHUNKER; + "VIDEO_TO_IMAGE", VIDEO_TO_IMAGE; "WHERE", WHERE; "ORDER", ORDER; "BY", BY; @@ -49,7 +50,7 @@ let ops = ">=", GE; ] |> Map.ofList -# 52 "SqlLexer.fs" +# 53 "SqlLexer.fs" let trans : uint16[] array = [| (* State 0 *) @@ -102,66 +103,66 @@ let rec _fslex_dummy () = _fslex_dummy() and tokenize lexbuf = match _fslex_tables.Interpret(0,lexbuf) with | 0 -> ( -# 66 "SqlLexer.fsl" +# 67 "SqlLexer.fsl" tokenize lexbuf -# 107 "SqlLexer.fs" +# 108 "SqlLexer.fs" ) | 1 -> ( -# 67 "SqlLexer.fsl" +# 68 "SqlLexer.fsl" lexbuf.EndPos <- lexbuf.EndPos.NextLine; tokenize lexbuf; -# 112 "SqlLexer.fs" +# 113 "SqlLexer.fs" ) | 2 -> ( -# 68 "SqlLexer.fsl" +# 69 "SqlLexer.fsl" INT(Int32.Parse(LexBuffer<_>.LexemeString lexbuf)) -# 117 "SqlLexer.fs" +# 118 "SqlLexer.fs" ) | 3 -> ( -# 69 "SqlLexer.fsl" +# 70 "SqlLexer.fsl" FLOAT(Double.Parse(LexBuffer<_>.LexemeString lexbuf)) -# 122 "SqlLexer.fs" +# 123 "SqlLexer.fs" ) | 4 -> ( -# 70 "SqlLexer.fsl" +# 71 "SqlLexer.fsl" ops.[LexBuffer<_>.LexemeString lexbuf] -# 127 "SqlLexer.fs" +# 128 "SqlLexer.fs" ) | 5 -> ( -# 71 "SqlLexer.fsl" +# 72 "SqlLexer.fsl" match keywords.TryFind(LexBuffer<_>.LexemeString lexbuf) with | Some(token) -> token | None -> ID(LexBuffer<_>.LexemeString lexbuf) -# 134 "SqlLexer.fs" +# 135 "SqlLexer.fs" ) | 6 -> ( -# 74 "SqlLexer.fsl" +# 75 "SqlLexer.fsl" COMMA -# 139 "SqlLexer.fs" +# 140 "SqlLexer.fs" ) | 7 -> ( -# 75 "SqlLexer.fsl" +# 76 "SqlLexer.fsl" EOF -# 144 "SqlLexer.fs" +# 145 "SqlLexer.fs" ) | 8 -> ( -# 76 "SqlLexer.fsl" +# 77 "SqlLexer.fsl" OBRCK -# 149 "SqlLexer.fs" +# 150 "SqlLexer.fs" ) | 9 -> ( -# 77 "SqlLexer.fsl" +# 78 "SqlLexer.fsl" CBRCK -# 154 "SqlLexer.fs" +# 155 "SqlLexer.fs" ) | 10 -> ( -# 78 "SqlLexer.fsl" +# 79 "SqlLexer.fsl" QUOT -# 159 "SqlLexer.fs" +# 160 "SqlLexer.fs" ) | 11 -> ( -# 79 "SqlLexer.fsl" +# 80 "SqlLexer.fsl" STAR -# 164 "SqlLexer.fs" +# 165 "SqlLexer.fs" ) | _ -> failwith "tokenize" diff --git a/ParserLexerFSharp/SqlLexer.fsl b/ParserLexerFSharp/SqlLexer.fsl index 36f1217..91e6e8e 100644 --- a/ParserLexerFSharp/SqlLexer.fsl +++ b/ParserLexerFSharp/SqlLexer.fsl @@ -19,6 +19,7 @@ let keywords = "FROM", FROM; "FILESYSTEM", FILESYSTEM; "VIDEO_CHUNKER", VIDEO_CHUNKER; + "VIDEO_TO_IMAGE", VIDEO_TO_IMAGE; "WHERE", WHERE; "ORDER", ORDER; "BY", BY; diff --git a/ParserLexerFSharp/SqlParser.fs b/ParserLexerFSharp/SqlParser.fs index 2222497..ef79ccb 100644 --- a/ParserLexerFSharp/SqlParser.fs +++ b/ParserLexerFSharp/SqlParser.fs @@ -13,6 +13,7 @@ type token = | TOP | FILESYSTEM | VIDEO_CHUNKER + | VIDEO_TO_IMAGE | STAR | QUOT | EOF @@ -62,6 +63,7 @@ type tokenId = | TOKEN_TOP | TOKEN_FILESYSTEM | TOKEN_VIDEO_CHUNKER + | TOKEN_VIDEO_TO_IMAGE | TOKEN_STAR | TOKEN_QUOT | TOKEN_EOF @@ -145,50 +147,51 @@ let tagOfToken (t:token) = | TOP -> 0 | FILESYSTEM -> 1 | VIDEO_CHUNKER -> 2 - | STAR -> 3 - | QUOT -> 4 - | EOF -> 5 - | TYPE_INT -> 6 - | TYPE_DOUBLE -> 7 - | TYPE_STRING -> 8 - | VALUES -> 9 - | INTO -> 10 - | INSERT -> 11 - | CBRCK -> 12 - | OBRCK -> 13 - | TABLE -> 14 - | DROP -> 15 - | CREATE -> 16 - | ASC -> 17 - | DESC -> 18 - | CREATE_TABLE -> 19 - | MAX -> 20 - | MIN -> 21 - | COUNT -> 22 - | SUM -> 23 - | SELECT -> 24 - | FROM -> 25 - | WHERE -> 26 - | ORDER -> 27 - | BY -> 28 - | GROUP -> 29 - | JOIN -> 30 - | INNER -> 31 - | LEFT -> 32 - | RIGHT -> 33 - | ON -> 34 - | EQ -> 35 - | LT -> 36 - | LE -> 37 - | GT -> 38 - | GE -> 39 - | COMMA -> 40 - | AND -> 41 - | OR -> 42 - | STRING _ -> 43 - | FLOAT _ -> 44 - | INT _ -> 45 - | ID _ -> 46 + | VIDEO_TO_IMAGE -> 3 + | STAR -> 4 + | QUOT -> 5 + | EOF -> 6 + | TYPE_INT -> 7 + | TYPE_DOUBLE -> 8 + | TYPE_STRING -> 9 + | VALUES -> 10 + | INTO -> 11 + | INSERT -> 12 + | CBRCK -> 13 + | OBRCK -> 14 + | TABLE -> 15 + | DROP -> 16 + | CREATE -> 17 + | ASC -> 18 + | DESC -> 19 + | CREATE_TABLE -> 20 + | MAX -> 21 + | MIN -> 22 + | COUNT -> 23 + | SUM -> 24 + | SELECT -> 25 + | FROM -> 26 + | WHERE -> 27 + | ORDER -> 28 + | BY -> 29 + | GROUP -> 30 + | JOIN -> 31 + | INNER -> 32 + | LEFT -> 33 + | RIGHT -> 34 + | ON -> 35 + | EQ -> 36 + | LT -> 37 + | LE -> 38 + | GT -> 39 + | GE -> 40 + | COMMA -> 41 + | AND -> 42 + | OR -> 43 + | STRING _ -> 44 + | FLOAT _ -> 45 + | INT _ -> 46 + | ID _ -> 47 // This function maps integer indexes to symbolic token ids let tokenTagToTokenId (tokenIdx:int) = @@ -196,52 +199,53 @@ let tokenTagToTokenId (tokenIdx:int) = | 0 -> TOKEN_TOP | 1 -> TOKEN_FILESYSTEM | 2 -> TOKEN_VIDEO_CHUNKER - | 3 -> TOKEN_STAR - | 4 -> TOKEN_QUOT - | 5 -> TOKEN_EOF - | 6 -> TOKEN_TYPE_INT - | 7 -> TOKEN_TYPE_DOUBLE - | 8 -> TOKEN_TYPE_STRING - | 9 -> TOKEN_VALUES - | 10 -> TOKEN_INTO - | 11 -> TOKEN_INSERT - | 12 -> TOKEN_CBRCK - | 13 -> TOKEN_OBRCK - | 14 -> TOKEN_TABLE - | 15 -> TOKEN_DROP - | 16 -> TOKEN_CREATE - | 17 -> TOKEN_ASC - | 18 -> TOKEN_DESC - | 19 -> TOKEN_CREATE_TABLE - | 20 -> TOKEN_MAX - | 21 -> TOKEN_MIN - | 22 -> TOKEN_COUNT - | 23 -> TOKEN_SUM - | 24 -> TOKEN_SELECT - | 25 -> TOKEN_FROM - | 26 -> TOKEN_WHERE - | 27 -> TOKEN_ORDER - | 28 -> TOKEN_BY - | 29 -> TOKEN_GROUP - | 30 -> TOKEN_JOIN - | 31 -> TOKEN_INNER - | 32 -> TOKEN_LEFT - | 33 -> TOKEN_RIGHT - | 34 -> TOKEN_ON - | 35 -> TOKEN_EQ - | 36 -> TOKEN_LT - | 37 -> TOKEN_LE - | 38 -> TOKEN_GT - | 39 -> TOKEN_GE - | 40 -> TOKEN_COMMA - | 41 -> TOKEN_AND - | 42 -> TOKEN_OR - | 43 -> TOKEN_STRING - | 44 -> TOKEN_FLOAT - | 45 -> TOKEN_INT - | 46 -> TOKEN_ID - | 49 -> TOKEN_end_of_input - | 47 -> TOKEN_error + | 3 -> TOKEN_VIDEO_TO_IMAGE + | 4 -> TOKEN_STAR + | 5 -> TOKEN_QUOT + | 6 -> TOKEN_EOF + | 7 -> TOKEN_TYPE_INT + | 8 -> TOKEN_TYPE_DOUBLE + | 9 -> TOKEN_TYPE_STRING + | 10 -> TOKEN_VALUES + | 11 -> TOKEN_INTO + | 12 -> TOKEN_INSERT + | 13 -> TOKEN_CBRCK + | 14 -> TOKEN_OBRCK + | 15 -> TOKEN_TABLE + | 16 -> TOKEN_DROP + | 17 -> TOKEN_CREATE + | 18 -> TOKEN_ASC + | 19 -> TOKEN_DESC + | 20 -> TOKEN_CREATE_TABLE + | 21 -> TOKEN_MAX + | 22 -> TOKEN_MIN + | 23 -> TOKEN_COUNT + | 24 -> TOKEN_SUM + | 25 -> TOKEN_SELECT + | 26 -> TOKEN_FROM + | 27 -> TOKEN_WHERE + | 28 -> TOKEN_ORDER + | 29 -> TOKEN_BY + | 30 -> TOKEN_GROUP + | 31 -> TOKEN_JOIN + | 32 -> TOKEN_INNER + | 33 -> TOKEN_LEFT + | 34 -> TOKEN_RIGHT + | 35 -> TOKEN_ON + | 36 -> TOKEN_EQ + | 37 -> TOKEN_LT + | 38 -> TOKEN_LE + | 39 -> TOKEN_GT + | 40 -> TOKEN_GE + | 41 -> TOKEN_COMMA + | 42 -> TOKEN_AND + | 43 -> TOKEN_OR + | 44 -> TOKEN_STRING + | 45 -> TOKEN_FLOAT + | 46 -> TOKEN_INT + | 47 -> TOKEN_ID + | 50 -> TOKEN_end_of_input + | 48 -> TOKEN_error | _ -> failwith "tokenTagToTokenId: bad token" /// This function maps production indexes returned in syntax errors to strings representing the non terminal that would be produced by that production @@ -268,67 +272,68 @@ let prodIdxToNonTerminal (prodIdx:int) = | 18 -> NONTERM_fromStatement | 19 -> NONTERM_fromStatement | 20 -> NONTERM_fromStatement - | 21 -> NONTERM_topClause + | 21 -> NONTERM_fromStatement | 22 -> NONTERM_topClause - | 23 -> NONTERM_columnSelect + | 23 -> NONTERM_topClause | 24 -> NONTERM_columnSelect - | 25 -> NONTERM_columnList + | 25 -> NONTERM_columnSelect | 26 -> NONTERM_columnList | 27 -> NONTERM_columnList | 28 -> NONTERM_columnList | 29 -> NONTERM_columnList | 30 -> NONTERM_columnList - | 31 -> NONTERM_aggregate + | 31 -> NONTERM_columnList | 32 -> NONTERM_aggregate | 33 -> NONTERM_aggregate | 34 -> NONTERM_aggregate - | 35 -> NONTERM_joinList + | 35 -> NONTERM_aggregate | 36 -> NONTERM_joinList | 37 -> NONTERM_joinList - | 38 -> NONTERM_joinClause + | 38 -> NONTERM_joinList | 39 -> NONTERM_joinClause | 40 -> NONTERM_joinClause | 41 -> NONTERM_joinClause - | 42 -> NONTERM_joinOnClause + | 42 -> NONTERM_joinClause | 43 -> NONTERM_joinOnClause - | 44 -> NONTERM_conditionList + | 44 -> NONTERM_joinOnClause | 45 -> NONTERM_conditionList | 46 -> NONTERM_conditionList | 47 -> NONTERM_conditionList | 48 -> NONTERM_conditionList | 49 -> NONTERM_conditionList | 50 -> NONTERM_conditionList - | 51 -> NONTERM_whereClause + | 51 -> NONTERM_conditionList | 52 -> NONTERM_whereClause - | 53 -> NONTERM_op + | 53 -> NONTERM_whereClause | 54 -> NONTERM_op | 55 -> NONTERM_op | 56 -> NONTERM_op | 57 -> NONTERM_op - | 58 -> NONTERM_value + | 58 -> NONTERM_op | 59 -> NONTERM_value | 60 -> NONTERM_value | 61 -> NONTERM_value | 62 -> NONTERM_value | 63 -> NONTERM_value - | 64 -> NONTERM_groupByClause + | 64 -> NONTERM_value | 65 -> NONTERM_groupByClause - | 66 -> NONTERM_groupByList + | 66 -> NONTERM_groupByClause | 67 -> NONTERM_groupByList - | 68 -> NONTERM_orderByClause + | 68 -> NONTERM_groupByList | 69 -> NONTERM_orderByClause - | 70 -> NONTERM_orderByList + | 70 -> NONTERM_orderByClause | 71 -> NONTERM_orderByList - | 72 -> NONTERM_orderBy + | 72 -> NONTERM_orderByList | 73 -> NONTERM_orderBy | 74 -> NONTERM_orderBy - | 75 -> NONTERM_funcCall + | 75 -> NONTERM_orderBy | 76 -> NONTERM_funcCall | 77 -> NONTERM_funcCall + | 78 -> NONTERM_funcCall | _ -> failwith "prodIdxToNonTerminal: bad production index" -let _fsyacc_endOfInputTag = 49 -let _fsyacc_tagOfErrorTerminal = 47 +let _fsyacc_endOfInputTag = 50 +let _fsyacc_tagOfErrorTerminal = 48 // This function gets the name of a token as a string let token_to_string (t:token) = @@ -336,6 +341,7 @@ let token_to_string (t:token) = | TOP -> "TOP" | FILESYSTEM -> "FILESYSTEM" | VIDEO_CHUNKER -> "VIDEO_CHUNKER" + | VIDEO_TO_IMAGE -> "VIDEO_TO_IMAGE" | STAR -> "STAR" | QUOT -> "QUOT" | EOF -> "EOF" @@ -387,6 +393,7 @@ let _fsyacc_dataOfToken (t:token) = | TOP -> (null : System.Object) | FILESYSTEM -> (null : System.Object) | VIDEO_CHUNKER -> (null : System.Object) + | VIDEO_TO_IMAGE -> (null : System.Object) | STAR -> (null : System.Object) | QUOT -> (null : System.Object) | EOF -> (null : System.Object) @@ -431,18 +438,18 @@ let _fsyacc_dataOfToken (t:token) = | FLOAT _fsyacc_x -> Microsoft.FSharp.Core.Operators.box _fsyacc_x | INT _fsyacc_x -> Microsoft.FSharp.Core.Operators.box _fsyacc_x | ID _fsyacc_x -> Microsoft.FSharp.Core.Operators.box _fsyacc_x -let _fsyacc_gotos = [| 0us; 65535us; 1us; 65535us; 0us; 1us; 1us; 65535us; 0us; 2us; 1us; 65535us; 10us; 11us; 1us; 65535us; 15us; 16us; 1us; 65535us; 4us; 5us; 1us; 65535us; 6us; 7us; 1us; 65535us; 24us; 25us; 2us; 65535us; 24us; 30us; 31us; 32us; 3us; 65535us; 8us; 9us; 52us; 53us; 63us; 64us; 1us; 65535us; 43us; 44us; 3us; 65535us; 8us; 42us; 52us; 42us; 63us; 42us; 1us; 65535us; 42us; 43us; 1us; 65535us; 42us; 69us; 2us; 65535us; 42us; 73us; 71us; 74us; 2us; 65535us; 44us; 45us; 93us; 94us; 2us; 65535us; 44us; 93us; 93us; 93us; 4us; 65535us; 97us; 98us; 101us; 102us; 105us; 106us; 108us; 109us; 6us; 65535us; 110us; 111us; 115us; 116us; 117us; 118us; 123us; 124us; 125us; 126us; 127us; 128us; 1us; 65535us; 45us; 46us; 2us; 65535us; 112us; 113us; 120us; 121us; 16us; 65535us; 15us; 19us; 20us; 21us; 42us; 70us; 56us; 57us; 71us; 72us; 110us; 112us; 113us; 114us; 115us; 112us; 117us; 112us; 121us; 122us; 123us; 112us; 125us; 112us; 127us; 112us; 160us; 161us; 163us; 164us; 166us; 167us; 1us; 65535us; 46us; 47us; 2us; 65535us; 146us; 147us; 149us; 150us; 1us; 65535us; 47us; 48us; 2us; 65535us; 152us; 153us; 155us; 156us; 2us; 65535us; 152us; 154us; 155us; 154us; 9us; 65535us; 42us; 75us; 71us; 76us; 110us; 120us; 113us; 119us; 115us; 120us; 117us; 120us; 123us; 120us; 125us; 120us; 127us; 120us; |] -let _fsyacc_sparseGotoTableRowOffsets = [|0us; 1us; 3us; 5us; 7us; 9us; 11us; 13us; 15us; 18us; 22us; 24us; 28us; 30us; 32us; 35us; 38us; 41us; 46us; 53us; 55us; 58us; 75us; 77us; 80us; 82us; 85us; 88us; |] -let _fsyacc_stateToProdIdxsTableElements = [| 1us; 0us; 1us; 0us; 1us; 1us; 1us; 1us; 1us; 2us; 1us; 2us; 1us; 3us; 1us; 3us; 1us; 4us; 1us; 4us; 1us; 5us; 1us; 5us; 1us; 6us; 1us; 6us; 1us; 6us; 1us; 6us; 2us; 6us; 8us; 1us; 6us; 1us; 6us; 1us; 7us; 1us; 8us; 1us; 8us; 1us; 9us; 1us; 9us; 1us; 9us; 2us; 9us; 12us; 1us; 9us; 1us; 9us; 1us; 10us; 1us; 10us; 1us; 11us; 1us; 12us; 1us; 12us; 1us; 13us; 1us; 13us; 1us; 14us; 1us; 14us; 1us; 15us; 1us; 15us; 1us; 15us; 1us; 15us; 1us; 15us; 1us; 16us; 1us; 16us; 1us; 16us; 1us; 16us; 1us; 16us; 1us; 16us; 1us; 16us; 4us; 17us; 18us; 19us; 20us; 1us; 17us; 1us; 18us; 1us; 18us; 1us; 18us; 1us; 18us; 1us; 19us; 1us; 19us; 1us; 19us; 1us; 19us; 1us; 20us; 1us; 20us; 1us; 20us; 1us; 20us; 1us; 20us; 1us; 20us; 1us; 20us; 1us; 21us; 1us; 21us; 1us; 23us; 4us; 24us; 26us; 28us; 30us; 1us; 25us; 3us; 26us; 28us; 30us; 1us; 26us; 1us; 27us; 1us; 28us; 1us; 29us; 1us; 30us; 1us; 31us; 1us; 31us; 1us; 31us; 1us; 31us; 1us; 32us; 1us; 32us; 1us; 32us; 1us; 32us; 1us; 33us; 1us; 33us; 1us; 33us; 1us; 33us; 1us; 34us; 1us; 34us; 1us; 34us; 1us; 34us; 2us; 36us; 37us; 1us; 37us; 1us; 38us; 1us; 38us; 1us; 38us; 1us; 38us; 1us; 39us; 1us; 39us; 1us; 39us; 1us; 39us; 1us; 40us; 1us; 40us; 1us; 40us; 1us; 40us; 1us; 41us; 1us; 41us; 1us; 41us; 1us; 43us; 1us; 43us; 5us; 44us; 45us; 46us; 47us; 49us; 5us; 44us; 45us; 46us; 47us; 49us; 3us; 44us; 45us; 46us; 1us; 45us; 1us; 45us; 1us; 46us; 1us; 46us; 2us; 47us; 49us; 2us; 48us; 50us; 2us; 48us; 50us; 2us; 48us; 50us; 1us; 49us; 1us; 49us; 1us; 50us; 1us; 50us; 1us; 52us; 1us; 52us; 1us; 53us; 1us; 54us; 1us; 55us; 1us; 56us; 1us; 57us; 1us; 58us; 1us; 59us; 3us; 60us; 61us; 62us; 1us; 60us; 1us; 60us; 1us; 61us; 1us; 61us; 1us; 62us; 1us; 62us; 1us; 63us; 4us; 63us; 75us; 76us; 77us; 1us; 65us; 1us; 65us; 1us; 65us; 2us; 66us; 67us; 1us; 67us; 1us; 67us; 1us; 69us; 1us; 69us; 1us; 69us; 2us; 70us; 71us; 1us; 71us; 1us; 71us; 3us; 72us; 73us; 74us; 1us; 73us; 1us; 74us; 3us; 75us; 76us; 77us; 3us; 75us; 76us; 77us; 1us; 75us; 2us; 76us; 77us; 2us; 76us; 77us; 1us; 76us; 1us; 77us; 1us; 77us; 1us; 77us; |] -let _fsyacc_stateToProdIdxsTableRowOffsets = [|0us; 2us; 4us; 6us; 8us; 10us; 12us; 14us; 16us; 18us; 20us; 22us; 24us; 26us; 28us; 30us; 32us; 35us; 37us; 39us; 41us; 43us; 45us; 47us; 49us; 51us; 54us; 56us; 58us; 60us; 62us; 64us; 66us; 68us; 70us; 72us; 74us; 76us; 78us; 80us; 82us; 84us; 86us; 88us; 90us; 92us; 94us; 96us; 98us; 100us; 105us; 107us; 109us; 111us; 113us; 115us; 117us; 119us; 121us; 123us; 125us; 127us; 129us; 131us; 133us; 135us; 137us; 139us; 141us; 143us; 148us; 150us; 154us; 156us; 158us; 160us; 162us; 164us; 166us; 168us; 170us; 172us; 174us; 176us; 178us; 180us; 182us; 184us; 186us; 188us; 190us; 192us; 194us; 196us; 199us; 201us; 203us; 205us; 207us; 209us; 211us; 213us; 215us; 217us; 219us; 221us; 223us; 225us; 227us; 229us; 231us; 233us; 235us; 241us; 247us; 251us; 253us; 255us; 257us; 259us; 262us; 265us; 268us; 271us; 273us; 275us; 277us; 279us; 281us; 283us; 285us; 287us; 289us; 291us; 293us; 295us; 297us; 301us; 303us; 305us; 307us; 309us; 311us; 313us; 315us; 320us; 322us; 324us; 326us; 329us; 331us; 333us; 335us; 337us; 339us; 342us; 344us; 346us; 350us; 352us; 354us; 358us; 362us; 364us; 367us; 370us; 372us; 374us; 376us; |] -let _fsyacc_action_rows = 169 -let _fsyacc_actionTableElements = [|4us; 32768us; 11us; 10us; 15us; 6us; 16us; 4us; 24us; 8us; 0us; 49152us; 1us; 32768us; 5us; 3us; 0us; 16385us; 1us; 32768us; 14us; 22us; 0us; 16386us; 1us; 32768us; 14us; 28us; 0us; 16387us; 1us; 16406us; 0us; 66us; 0us; 16388us; 1us; 32768us; 10us; 12us; 0us; 16389us; 1us; 32768us; 46us; 13us; 1us; 32768us; 9us; 14us; 1us; 32768us; 13us; 15us; 4us; 32768us; 4us; 136us; 44us; 135us; 45us; 134us; 46us; 143us; 2us; 32768us; 12us; 17us; 40us; 20us; 1us; 32768us; 5us; 18us; 0us; 16390us; 0us; 16391us; 4us; 32768us; 4us; 136us; 44us; 135us; 45us; 134us; 46us; 143us; 0us; 16392us; 1us; 32768us; 46us; 23us; 1us; 32768us; 13us; 24us; 3us; 32768us; 6us; 33us; 7us; 35us; 8us; 37us; 2us; 32768us; 12us; 26us; 40us; 31us; 1us; 32768us; 5us; 27us; 0us; 16393us; 1us; 32768us; 46us; 29us; 0us; 16394us; 0us; 16395us; 3us; 32768us; 6us; 33us; 7us; 35us; 8us; 37us; 0us; 16396us; 1us; 32768us; 46us; 34us; 0us; 16397us; 1us; 32768us; 46us; 36us; 0us; 16398us; 1us; 32768us; 13us; 38us; 1us; 32768us; 45us; 39us; 1us; 32768us; 12us; 40us; 1us; 32768us; 46us; 41us; 0us; 16399us; 9us; 32768us; 3us; 68us; 4us; 136us; 20us; 77us; 21us; 81us; 22us; 85us; 23us; 89us; 44us; 135us; 45us; 134us; 46us; 144us; 1us; 32768us; 25us; 49us; 4us; 16419us; 30us; 107us; 31us; 95us; 32us; 99us; 33us; 103us; 1us; 16435us; 26us; 127us; 1us; 16448us; 29us; 145us; 1us; 16452us; 27us; 151us; 0us; 16400us; 4us; 32768us; 1us; 55us; 2us; 59us; 13us; 51us; 46us; 50us; 0us; 16401us; 1us; 32768us; 24us; 52us; 1us; 16406us; 0us; 66us; 1us; 32768us; 12us; 54us; 0us; 16402us; 1us; 32768us; 13us; 56us; 4us; 32768us; 4us; 136us; 44us; 135us; 45us; 134us; 46us; 143us; 1us; 32768us; 12us; 58us; 0us; 16403us; 1us; 32768us; 13us; 60us; 1us; 32768us; 45us; 61us; 1us; 32768us; 40us; 62us; 1us; 32768us; 24us; 63us; 1us; 16406us; 0us; 66us; 1us; 32768us; 12us; 65us; 0us; 16404us; 1us; 32768us; 45us; 67us; 0us; 16405us; 0us; 16407us; 1us; 16408us; 40us; 71us; 0us; 16409us; 8us; 32768us; 4us; 136us; 20us; 77us; 21us; 81us; 22us; 85us; 23us; 89us; 44us; 135us; 45us; 134us; 46us; 144us; 0us; 16410us; 0us; 16411us; 0us; 16412us; 0us; 16413us; 0us; 16414us; 1us; 32768us; 13us; 78us; 1us; 32768us; 46us; 79us; 1us; 32768us; 12us; 80us; 0us; 16415us; 1us; 32768us; 13us; 82us; 1us; 32768us; 46us; 83us; 1us; 32768us; 12us; 84us; 0us; 16416us; 1us; 32768us; 13us; 86us; 1us; 32768us; 46us; 87us; 1us; 32768us; 12us; 88us; 0us; 16417us; 1us; 32768us; 13us; 90us; 1us; 32768us; 46us; 91us; 1us; 32768us; 12us; 92us; 0us; 16418us; 4us; 16419us; 30us; 107us; 31us; 95us; 32us; 99us; 33us; 103us; 0us; 16421us; 1us; 32768us; 30us; 96us; 1us; 32768us; 46us; 97us; 1us; 16426us; 34us; 110us; 0us; 16422us; 1us; 32768us; 30us; 100us; 1us; 32768us; 46us; 101us; 1us; 16426us; 34us; 110us; 0us; 16423us; 1us; 32768us; 30us; 104us; 1us; 32768us; 46us; 105us; 1us; 16426us; 34us; 110us; 0us; 16424us; 1us; 32768us; 46us; 108us; 1us; 16426us; 34us; 110us; 0us; 16425us; 4us; 32768us; 4us; 136us; 44us; 135us; 45us; 134us; 46us; 144us; 0us; 16427us; 5us; 32768us; 35us; 129us; 36us; 130us; 37us; 131us; 38us; 132us; 39us; 133us; 4us; 32768us; 4us; 136us; 44us; 135us; 45us; 134us; 46us; 144us; 2us; 16428us; 41us; 115us; 42us; 117us; 4us; 32768us; 4us; 136us; 44us; 135us; 45us; 134us; 46us; 144us; 0us; 16429us; 4us; 32768us; 4us; 136us; 44us; 135us; 45us; 134us; 46us; 144us; 0us; 16430us; 1us; 16431us; 41us; 123us; 5us; 32768us; 35us; 129us; 36us; 130us; 37us; 131us; 38us; 132us; 39us; 133us; 4us; 32768us; 4us; 136us; 44us; 135us; 45us; 134us; 46us; 143us; 1us; 16432us; 42us; 125us; 4us; 32768us; 4us; 136us; 44us; 135us; 45us; 134us; 46us; 144us; 0us; 16433us; 4us; 32768us; 4us; 136us; 44us; 135us; 45us; 134us; 46us; 144us; 0us; 16434us; 4us; 32768us; 4us; 136us; 44us; 135us; 45us; 134us; 46us; 144us; 0us; 16436us; 0us; 16437us; 0us; 16438us; 0us; 16439us; 0us; 16440us; 0us; 16441us; 0us; 16442us; 0us; 16443us; 3us; 32768us; 44us; 139us; 45us; 141us; 46us; 137us; 1us; 32768us; 4us; 138us; 0us; 16444us; 1us; 32768us; 4us; 140us; 0us; 16445us; 1us; 32768us; 4us; 142us; 0us; 16446us; 0us; 16447us; 1us; 16447us; 13us; 160us; 1us; 32768us; 28us; 146us; 1us; 32768us; 46us; 148us; 0us; 16449us; 1us; 16450us; 40us; 149us; 1us; 32768us; 46us; 148us; 0us; 16451us; 1us; 32768us; 28us; 152us; 1us; 32768us; 46us; 157us; 0us; 16453us; 1us; 16454us; 40us; 155us; 1us; 32768us; 46us; 157us; 0us; 16455us; 2us; 16456us; 17us; 158us; 18us; 159us; 0us; 16457us; 0us; 16458us; 4us; 32768us; 4us; 136us; 44us; 135us; 45us; 134us; 46us; 143us; 2us; 32768us; 12us; 162us; 40us; 163us; 0us; 16459us; 4us; 32768us; 4us; 136us; 44us; 135us; 45us; 134us; 46us; 143us; 2us; 32768us; 12us; 165us; 40us; 166us; 0us; 16460us; 4us; 32768us; 4us; 136us; 44us; 135us; 45us; 134us; 46us; 143us; 1us; 32768us; 12us; 168us; 0us; 16461us; |] -let _fsyacc_actionTableRowOffsets = [|0us; 5us; 6us; 8us; 9us; 11us; 12us; 14us; 15us; 17us; 18us; 20us; 21us; 23us; 25us; 27us; 32us; 35us; 37us; 38us; 39us; 44us; 45us; 47us; 49us; 53us; 56us; 58us; 59us; 61us; 62us; 63us; 67us; 68us; 70us; 71us; 73us; 74us; 76us; 78us; 80us; 82us; 83us; 93us; 95us; 100us; 102us; 104us; 106us; 107us; 112us; 113us; 115us; 117us; 119us; 120us; 122us; 127us; 129us; 130us; 132us; 134us; 136us; 138us; 140us; 142us; 143us; 145us; 146us; 147us; 149us; 150us; 159us; 160us; 161us; 162us; 163us; 164us; 166us; 168us; 170us; 171us; 173us; 175us; 177us; 178us; 180us; 182us; 184us; 185us; 187us; 189us; 191us; 192us; 197us; 198us; 200us; 202us; 204us; 205us; 207us; 209us; 211us; 212us; 214us; 216us; 218us; 219us; 221us; 223us; 224us; 229us; 230us; 236us; 241us; 244us; 249us; 250us; 255us; 256us; 258us; 264us; 269us; 271us; 276us; 277us; 282us; 283us; 288us; 289us; 290us; 291us; 292us; 293us; 294us; 295us; 296us; 300us; 302us; 303us; 305us; 306us; 308us; 309us; 310us; 312us; 314us; 316us; 317us; 319us; 321us; 322us; 324us; 326us; 327us; 329us; 331us; 332us; 335us; 336us; 337us; 342us; 345us; 346us; 351us; 354us; 355us; 360us; 362us; |] -let _fsyacc_reductionSymbolCounts = [|1us; 2us; 2us; 2us; 2us; 2us; 7us; 1us; 3us; 6us; 2us; 1us; 3us; 2us; 2us; 5us; 7us; 2us; 5us; 5us; 8us; 2us; 0us; 1us; 1us; 1us; 3us; 1us; 3us; 1us; 3us; 4us; 4us; 4us; 4us; 0us; 1us; 2us; 4us; 4us; 4us; 3us; 0us; 2us; 3us; 5us; 5us; 3us; 3us; 5us; 5us; 0us; 2us; 1us; 1us; 1us; 1us; 1us; 1us; 1us; 3us; 3us; 3us; 1us; 0us; 3us; 1us; 3us; 0us; 3us; 1us; 3us; 1us; 2us; 2us; 4us; 6us; 8us; |] -let _fsyacc_productionToNonTerminalTable = [|0us; 1us; 2us; 2us; 2us; 2us; 3us; 4us; 4us; 5us; 6us; 7us; 7us; 8us; 8us; 8us; 9us; 10us; 10us; 10us; 10us; 11us; 11us; 12us; 12us; 13us; 13us; 13us; 13us; 13us; 13us; 14us; 14us; 14us; 14us; 15us; 15us; 15us; 16us; 16us; 16us; 16us; 17us; 17us; 18us; 18us; 18us; 18us; 18us; 18us; 18us; 19us; 19us; 20us; 20us; 20us; 20us; 20us; 21us; 21us; 21us; 21us; 21us; 21us; 22us; 22us; 23us; 23us; 24us; 24us; 25us; 25us; 26us; 26us; 26us; 27us; 27us; 27us; |] -let _fsyacc_immediateActions = [|65535us; 49152us; 65535us; 16385us; 65535us; 16386us; 65535us; 16387us; 65535us; 16388us; 65535us; 16389us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 16390us; 16391us; 65535us; 16392us; 65535us; 65535us; 65535us; 65535us; 65535us; 16393us; 65535us; 16394us; 16395us; 65535us; 16396us; 65535us; 16397us; 65535us; 16398us; 65535us; 65535us; 65535us; 65535us; 16399us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 16400us; 65535us; 16401us; 65535us; 65535us; 65535us; 16402us; 65535us; 65535us; 65535us; 16403us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 16404us; 65535us; 16405us; 16407us; 65535us; 16409us; 65535us; 16410us; 16411us; 16412us; 16413us; 16414us; 65535us; 65535us; 65535us; 16415us; 65535us; 65535us; 65535us; 16416us; 65535us; 65535us; 65535us; 16417us; 65535us; 65535us; 65535us; 16418us; 65535us; 16421us; 65535us; 65535us; 65535us; 16422us; 65535us; 65535us; 65535us; 16423us; 65535us; 65535us; 65535us; 16424us; 65535us; 65535us; 16425us; 65535us; 16427us; 65535us; 65535us; 65535us; 65535us; 16429us; 65535us; 16430us; 65535us; 65535us; 65535us; 65535us; 65535us; 16433us; 65535us; 16434us; 65535us; 16436us; 16437us; 16438us; 16439us; 16440us; 16441us; 16442us; 16443us; 65535us; 65535us; 16444us; 65535us; 16445us; 65535us; 16446us; 16447us; 65535us; 65535us; 65535us; 16449us; 65535us; 65535us; 16451us; 65535us; 65535us; 16453us; 65535us; 65535us; 16455us; 65535us; 16457us; 16458us; 65535us; 65535us; 16459us; 65535us; 65535us; 16460us; 65535us; 65535us; 16461us; |] +let _fsyacc_gotos = [| 0us; 65535us; 1us; 65535us; 0us; 1us; 1us; 65535us; 0us; 2us; 1us; 65535us; 10us; 11us; 1us; 65535us; 15us; 16us; 1us; 65535us; 4us; 5us; 1us; 65535us; 6us; 7us; 1us; 65535us; 24us; 25us; 2us; 65535us; 24us; 30us; 31us; 32us; 4us; 65535us; 8us; 9us; 52us; 53us; 63us; 64us; 72us; 73us; 1us; 65535us; 43us; 44us; 4us; 65535us; 8us; 42us; 52us; 42us; 63us; 42us; 72us; 42us; 1us; 65535us; 42us; 43us; 1us; 65535us; 42us; 78us; 2us; 65535us; 42us; 82us; 80us; 83us; 2us; 65535us; 44us; 45us; 102us; 103us; 2us; 65535us; 44us; 102us; 102us; 102us; 4us; 65535us; 106us; 107us; 110us; 111us; 114us; 115us; 117us; 118us; 6us; 65535us; 119us; 120us; 124us; 125us; 126us; 127us; 132us; 133us; 134us; 135us; 136us; 137us; 1us; 65535us; 45us; 46us; 2us; 65535us; 121us; 122us; 129us; 130us; 16us; 65535us; 15us; 19us; 20us; 21us; 42us; 79us; 56us; 57us; 80us; 81us; 119us; 121us; 122us; 123us; 124us; 121us; 126us; 121us; 130us; 131us; 132us; 121us; 134us; 121us; 136us; 121us; 169us; 170us; 172us; 173us; 175us; 176us; 1us; 65535us; 46us; 47us; 2us; 65535us; 155us; 156us; 158us; 159us; 1us; 65535us; 47us; 48us; 2us; 65535us; 161us; 162us; 164us; 165us; 2us; 65535us; 161us; 163us; 164us; 163us; 9us; 65535us; 42us; 84us; 80us; 85us; 119us; 129us; 122us; 128us; 124us; 129us; 126us; 129us; 132us; 129us; 134us; 129us; 136us; 129us; |] +let _fsyacc_sparseGotoTableRowOffsets = [|0us; 1us; 3us; 5us; 7us; 9us; 11us; 13us; 15us; 18us; 23us; 25us; 30us; 32us; 34us; 37us; 40us; 43us; 48us; 55us; 57us; 60us; 77us; 79us; 82us; 84us; 87us; 90us; |] +let _fsyacc_stateToProdIdxsTableElements = [| 1us; 0us; 1us; 0us; 1us; 1us; 1us; 1us; 1us; 2us; 1us; 2us; 1us; 3us; 1us; 3us; 1us; 4us; 1us; 4us; 1us; 5us; 1us; 5us; 1us; 6us; 1us; 6us; 1us; 6us; 1us; 6us; 2us; 6us; 8us; 1us; 6us; 1us; 6us; 1us; 7us; 1us; 8us; 1us; 8us; 1us; 9us; 1us; 9us; 1us; 9us; 2us; 9us; 12us; 1us; 9us; 1us; 9us; 1us; 10us; 1us; 10us; 1us; 11us; 1us; 12us; 1us; 12us; 1us; 13us; 1us; 13us; 1us; 14us; 1us; 14us; 1us; 15us; 1us; 15us; 1us; 15us; 1us; 15us; 1us; 15us; 1us; 16us; 1us; 16us; 1us; 16us; 1us; 16us; 1us; 16us; 1us; 16us; 1us; 16us; 5us; 17us; 18us; 19us; 20us; 21us; 1us; 17us; 1us; 18us; 1us; 18us; 1us; 18us; 1us; 18us; 1us; 19us; 1us; 19us; 1us; 19us; 1us; 19us; 1us; 20us; 1us; 20us; 1us; 20us; 1us; 20us; 1us; 20us; 1us; 20us; 1us; 20us; 1us; 21us; 1us; 21us; 1us; 21us; 1us; 21us; 1us; 21us; 1us; 21us; 1us; 21us; 1us; 21us; 1us; 21us; 1us; 22us; 1us; 22us; 1us; 24us; 4us; 25us; 27us; 29us; 31us; 1us; 26us; 3us; 27us; 29us; 31us; 1us; 27us; 1us; 28us; 1us; 29us; 1us; 30us; 1us; 31us; 1us; 32us; 1us; 32us; 1us; 32us; 1us; 32us; 1us; 33us; 1us; 33us; 1us; 33us; 1us; 33us; 1us; 34us; 1us; 34us; 1us; 34us; 1us; 34us; 1us; 35us; 1us; 35us; 1us; 35us; 1us; 35us; 2us; 37us; 38us; 1us; 38us; 1us; 39us; 1us; 39us; 1us; 39us; 1us; 39us; 1us; 40us; 1us; 40us; 1us; 40us; 1us; 40us; 1us; 41us; 1us; 41us; 1us; 41us; 1us; 41us; 1us; 42us; 1us; 42us; 1us; 42us; 1us; 44us; 1us; 44us; 5us; 45us; 46us; 47us; 48us; 50us; 5us; 45us; 46us; 47us; 48us; 50us; 3us; 45us; 46us; 47us; 1us; 46us; 1us; 46us; 1us; 47us; 1us; 47us; 2us; 48us; 50us; 2us; 49us; 51us; 2us; 49us; 51us; 2us; 49us; 51us; 1us; 50us; 1us; 50us; 1us; 51us; 1us; 51us; 1us; 53us; 1us; 53us; 1us; 54us; 1us; 55us; 1us; 56us; 1us; 57us; 1us; 58us; 1us; 59us; 1us; 60us; 3us; 61us; 62us; 63us; 1us; 61us; 1us; 61us; 1us; 62us; 1us; 62us; 1us; 63us; 1us; 63us; 1us; 64us; 4us; 64us; 76us; 77us; 78us; 1us; 66us; 1us; 66us; 1us; 66us; 2us; 67us; 68us; 1us; 68us; 1us; 68us; 1us; 70us; 1us; 70us; 1us; 70us; 2us; 71us; 72us; 1us; 72us; 1us; 72us; 3us; 73us; 74us; 75us; 1us; 74us; 1us; 75us; 3us; 76us; 77us; 78us; 3us; 76us; 77us; 78us; 1us; 76us; 2us; 77us; 78us; 2us; 77us; 78us; 1us; 77us; 1us; 78us; 1us; 78us; 1us; 78us; |] +let _fsyacc_stateToProdIdxsTableRowOffsets = [|0us; 2us; 4us; 6us; 8us; 10us; 12us; 14us; 16us; 18us; 20us; 22us; 24us; 26us; 28us; 30us; 32us; 35us; 37us; 39us; 41us; 43us; 45us; 47us; 49us; 51us; 54us; 56us; 58us; 60us; 62us; 64us; 66us; 68us; 70us; 72us; 74us; 76us; 78us; 80us; 82us; 84us; 86us; 88us; 90us; 92us; 94us; 96us; 98us; 100us; 106us; 108us; 110us; 112us; 114us; 116us; 118us; 120us; 122us; 124us; 126us; 128us; 130us; 132us; 134us; 136us; 138us; 140us; 142us; 144us; 146us; 148us; 150us; 152us; 154us; 156us; 158us; 160us; 162us; 167us; 169us; 173us; 175us; 177us; 179us; 181us; 183us; 185us; 187us; 189us; 191us; 193us; 195us; 197us; 199us; 201us; 203us; 205us; 207us; 209us; 211us; 213us; 215us; 218us; 220us; 222us; 224us; 226us; 228us; 230us; 232us; 234us; 236us; 238us; 240us; 242us; 244us; 246us; 248us; 250us; 252us; 254us; 260us; 266us; 270us; 272us; 274us; 276us; 278us; 281us; 284us; 287us; 290us; 292us; 294us; 296us; 298us; 300us; 302us; 304us; 306us; 308us; 310us; 312us; 314us; 316us; 320us; 322us; 324us; 326us; 328us; 330us; 332us; 334us; 339us; 341us; 343us; 345us; 348us; 350us; 352us; 354us; 356us; 358us; 361us; 363us; 365us; 369us; 371us; 373us; 377us; 381us; 383us; 386us; 389us; 391us; 393us; 395us; |] +let _fsyacc_action_rows = 178 +let _fsyacc_actionTableElements = [|4us; 32768us; 12us; 10us; 16us; 6us; 17us; 4us; 25us; 8us; 0us; 49152us; 1us; 32768us; 6us; 3us; 0us; 16385us; 1us; 32768us; 15us; 22us; 0us; 16386us; 1us; 32768us; 15us; 28us; 0us; 16387us; 1us; 16407us; 0us; 75us; 0us; 16388us; 1us; 32768us; 11us; 12us; 0us; 16389us; 1us; 32768us; 47us; 13us; 1us; 32768us; 10us; 14us; 1us; 32768us; 14us; 15us; 4us; 32768us; 5us; 145us; 45us; 144us; 46us; 143us; 47us; 152us; 2us; 32768us; 13us; 17us; 41us; 20us; 1us; 32768us; 6us; 18us; 0us; 16390us; 0us; 16391us; 4us; 32768us; 5us; 145us; 45us; 144us; 46us; 143us; 47us; 152us; 0us; 16392us; 1us; 32768us; 47us; 23us; 1us; 32768us; 14us; 24us; 3us; 32768us; 7us; 33us; 8us; 35us; 9us; 37us; 2us; 32768us; 13us; 26us; 41us; 31us; 1us; 32768us; 6us; 27us; 0us; 16393us; 1us; 32768us; 47us; 29us; 0us; 16394us; 0us; 16395us; 3us; 32768us; 7us; 33us; 8us; 35us; 9us; 37us; 0us; 16396us; 1us; 32768us; 47us; 34us; 0us; 16397us; 1us; 32768us; 47us; 36us; 0us; 16398us; 1us; 32768us; 14us; 38us; 1us; 32768us; 46us; 39us; 1us; 32768us; 13us; 40us; 1us; 32768us; 47us; 41us; 0us; 16399us; 9us; 32768us; 4us; 77us; 5us; 145us; 21us; 86us; 22us; 90us; 23us; 94us; 24us; 98us; 45us; 144us; 46us; 143us; 47us; 153us; 1us; 32768us; 26us; 49us; 4us; 16420us; 31us; 116us; 32us; 104us; 33us; 108us; 34us; 112us; 1us; 16436us; 27us; 136us; 1us; 16449us; 30us; 154us; 1us; 16453us; 28us; 160us; 0us; 16400us; 5us; 32768us; 1us; 55us; 2us; 59us; 3us; 66us; 14us; 51us; 47us; 50us; 0us; 16401us; 1us; 32768us; 25us; 52us; 1us; 16407us; 0us; 75us; 1us; 32768us; 13us; 54us; 0us; 16402us; 1us; 32768us; 14us; 56us; 4us; 32768us; 5us; 145us; 45us; 144us; 46us; 143us; 47us; 152us; 1us; 32768us; 13us; 58us; 0us; 16403us; 1us; 32768us; 14us; 60us; 1us; 32768us; 46us; 61us; 1us; 32768us; 41us; 62us; 1us; 32768us; 25us; 63us; 1us; 16407us; 0us; 75us; 1us; 32768us; 13us; 65us; 0us; 16404us; 1us; 32768us; 14us; 67us; 1us; 32768us; 46us; 68us; 1us; 32768us; 41us; 69us; 1us; 32768us; 46us; 70us; 1us; 32768us; 41us; 71us; 1us; 32768us; 25us; 72us; 1us; 16407us; 0us; 75us; 1us; 32768us; 13us; 74us; 0us; 16405us; 1us; 32768us; 46us; 76us; 0us; 16406us; 0us; 16408us; 1us; 16409us; 41us; 80us; 0us; 16410us; 8us; 32768us; 5us; 145us; 21us; 86us; 22us; 90us; 23us; 94us; 24us; 98us; 45us; 144us; 46us; 143us; 47us; 153us; 0us; 16411us; 0us; 16412us; 0us; 16413us; 0us; 16414us; 0us; 16415us; 1us; 32768us; 14us; 87us; 1us; 32768us; 47us; 88us; 1us; 32768us; 13us; 89us; 0us; 16416us; 1us; 32768us; 14us; 91us; 1us; 32768us; 47us; 92us; 1us; 32768us; 13us; 93us; 0us; 16417us; 1us; 32768us; 14us; 95us; 1us; 32768us; 47us; 96us; 1us; 32768us; 13us; 97us; 0us; 16418us; 1us; 32768us; 14us; 99us; 1us; 32768us; 47us; 100us; 1us; 32768us; 13us; 101us; 0us; 16419us; 4us; 16420us; 31us; 116us; 32us; 104us; 33us; 108us; 34us; 112us; 0us; 16422us; 1us; 32768us; 31us; 105us; 1us; 32768us; 47us; 106us; 1us; 16427us; 35us; 119us; 0us; 16423us; 1us; 32768us; 31us; 109us; 1us; 32768us; 47us; 110us; 1us; 16427us; 35us; 119us; 0us; 16424us; 1us; 32768us; 31us; 113us; 1us; 32768us; 47us; 114us; 1us; 16427us; 35us; 119us; 0us; 16425us; 1us; 32768us; 47us; 117us; 1us; 16427us; 35us; 119us; 0us; 16426us; 4us; 32768us; 5us; 145us; 45us; 144us; 46us; 143us; 47us; 153us; 0us; 16428us; 5us; 32768us; 36us; 138us; 37us; 139us; 38us; 140us; 39us; 141us; 40us; 142us; 4us; 32768us; 5us; 145us; 45us; 144us; 46us; 143us; 47us; 153us; 2us; 16429us; 42us; 124us; 43us; 126us; 4us; 32768us; 5us; 145us; 45us; 144us; 46us; 143us; 47us; 153us; 0us; 16430us; 4us; 32768us; 5us; 145us; 45us; 144us; 46us; 143us; 47us; 153us; 0us; 16431us; 1us; 16432us; 42us; 132us; 5us; 32768us; 36us; 138us; 37us; 139us; 38us; 140us; 39us; 141us; 40us; 142us; 4us; 32768us; 5us; 145us; 45us; 144us; 46us; 143us; 47us; 152us; 1us; 16433us; 43us; 134us; 4us; 32768us; 5us; 145us; 45us; 144us; 46us; 143us; 47us; 153us; 0us; 16434us; 4us; 32768us; 5us; 145us; 45us; 144us; 46us; 143us; 47us; 153us; 0us; 16435us; 4us; 32768us; 5us; 145us; 45us; 144us; 46us; 143us; 47us; 153us; 0us; 16437us; 0us; 16438us; 0us; 16439us; 0us; 16440us; 0us; 16441us; 0us; 16442us; 0us; 16443us; 0us; 16444us; 3us; 32768us; 45us; 148us; 46us; 150us; 47us; 146us; 1us; 32768us; 5us; 147us; 0us; 16445us; 1us; 32768us; 5us; 149us; 0us; 16446us; 1us; 32768us; 5us; 151us; 0us; 16447us; 0us; 16448us; 1us; 16448us; 14us; 169us; 1us; 32768us; 29us; 155us; 1us; 32768us; 47us; 157us; 0us; 16450us; 1us; 16451us; 41us; 158us; 1us; 32768us; 47us; 157us; 0us; 16452us; 1us; 32768us; 29us; 161us; 1us; 32768us; 47us; 166us; 0us; 16454us; 1us; 16455us; 41us; 164us; 1us; 32768us; 47us; 166us; 0us; 16456us; 2us; 16457us; 18us; 167us; 19us; 168us; 0us; 16458us; 0us; 16459us; 4us; 32768us; 5us; 145us; 45us; 144us; 46us; 143us; 47us; 152us; 2us; 32768us; 13us; 171us; 41us; 172us; 0us; 16460us; 4us; 32768us; 5us; 145us; 45us; 144us; 46us; 143us; 47us; 152us; 2us; 32768us; 13us; 174us; 41us; 175us; 0us; 16461us; 4us; 32768us; 5us; 145us; 45us; 144us; 46us; 143us; 47us; 152us; 1us; 32768us; 13us; 177us; 0us; 16462us; |] +let _fsyacc_actionTableRowOffsets = [|0us; 5us; 6us; 8us; 9us; 11us; 12us; 14us; 15us; 17us; 18us; 20us; 21us; 23us; 25us; 27us; 32us; 35us; 37us; 38us; 39us; 44us; 45us; 47us; 49us; 53us; 56us; 58us; 59us; 61us; 62us; 63us; 67us; 68us; 70us; 71us; 73us; 74us; 76us; 78us; 80us; 82us; 83us; 93us; 95us; 100us; 102us; 104us; 106us; 107us; 113us; 114us; 116us; 118us; 120us; 121us; 123us; 128us; 130us; 131us; 133us; 135us; 137us; 139us; 141us; 143us; 144us; 146us; 148us; 150us; 152us; 154us; 156us; 158us; 160us; 161us; 163us; 164us; 165us; 167us; 168us; 177us; 178us; 179us; 180us; 181us; 182us; 184us; 186us; 188us; 189us; 191us; 193us; 195us; 196us; 198us; 200us; 202us; 203us; 205us; 207us; 209us; 210us; 215us; 216us; 218us; 220us; 222us; 223us; 225us; 227us; 229us; 230us; 232us; 234us; 236us; 237us; 239us; 241us; 242us; 247us; 248us; 254us; 259us; 262us; 267us; 268us; 273us; 274us; 276us; 282us; 287us; 289us; 294us; 295us; 300us; 301us; 306us; 307us; 308us; 309us; 310us; 311us; 312us; 313us; 314us; 318us; 320us; 321us; 323us; 324us; 326us; 327us; 328us; 330us; 332us; 334us; 335us; 337us; 339us; 340us; 342us; 344us; 345us; 347us; 349us; 350us; 353us; 354us; 355us; 360us; 363us; 364us; 369us; 372us; 373us; 378us; 380us; |] +let _fsyacc_reductionSymbolCounts = [|1us; 2us; 2us; 2us; 2us; 2us; 7us; 1us; 3us; 6us; 2us; 1us; 3us; 2us; 2us; 5us; 7us; 2us; 5us; 5us; 8us; 10us; 2us; 0us; 1us; 1us; 1us; 3us; 1us; 3us; 1us; 3us; 4us; 4us; 4us; 4us; 0us; 1us; 2us; 4us; 4us; 4us; 3us; 0us; 2us; 3us; 5us; 5us; 3us; 3us; 5us; 5us; 0us; 2us; 1us; 1us; 1us; 1us; 1us; 1us; 1us; 3us; 3us; 3us; 1us; 0us; 3us; 1us; 3us; 0us; 3us; 1us; 3us; 1us; 2us; 2us; 4us; 6us; 8us; |] +let _fsyacc_productionToNonTerminalTable = [|0us; 1us; 2us; 2us; 2us; 2us; 3us; 4us; 4us; 5us; 6us; 7us; 7us; 8us; 8us; 8us; 9us; 10us; 10us; 10us; 10us; 10us; 11us; 11us; 12us; 12us; 13us; 13us; 13us; 13us; 13us; 13us; 14us; 14us; 14us; 14us; 15us; 15us; 15us; 16us; 16us; 16us; 16us; 17us; 17us; 18us; 18us; 18us; 18us; 18us; 18us; 18us; 19us; 19us; 20us; 20us; 20us; 20us; 20us; 21us; 21us; 21us; 21us; 21us; 21us; 22us; 22us; 23us; 23us; 24us; 24us; 25us; 25us; 26us; 26us; 26us; 27us; 27us; 27us; |] +let _fsyacc_immediateActions = [|65535us; 49152us; 65535us; 16385us; 65535us; 16386us; 65535us; 16387us; 65535us; 16388us; 65535us; 16389us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 16390us; 16391us; 65535us; 16392us; 65535us; 65535us; 65535us; 65535us; 65535us; 16393us; 65535us; 16394us; 16395us; 65535us; 16396us; 65535us; 16397us; 65535us; 16398us; 65535us; 65535us; 65535us; 65535us; 16399us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 16400us; 65535us; 16401us; 65535us; 65535us; 65535us; 16402us; 65535us; 65535us; 65535us; 16403us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 16404us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 65535us; 16405us; 65535us; 16406us; 16408us; 65535us; 16410us; 65535us; 16411us; 16412us; 16413us; 16414us; 16415us; 65535us; 65535us; 65535us; 16416us; 65535us; 65535us; 65535us; 16417us; 65535us; 65535us; 65535us; 16418us; 65535us; 65535us; 65535us; 16419us; 65535us; 16422us; 65535us; 65535us; 65535us; 16423us; 65535us; 65535us; 65535us; 16424us; 65535us; 65535us; 65535us; 16425us; 65535us; 65535us; 16426us; 65535us; 16428us; 65535us; 65535us; 65535us; 65535us; 16430us; 65535us; 16431us; 65535us; 65535us; 65535us; 65535us; 65535us; 16434us; 65535us; 16435us; 65535us; 16437us; 16438us; 16439us; 16440us; 16441us; 16442us; 16443us; 16444us; 65535us; 65535us; 16445us; 65535us; 16446us; 65535us; 16447us; 16448us; 65535us; 65535us; 65535us; 16450us; 65535us; 65535us; 16452us; 65535us; 65535us; 16454us; 65535us; 65535us; 16456us; 65535us; 16458us; 16459us; 65535us; 65535us; 16460us; 65535us; 65535us; 16461us; 65535us; 65535us; 16462us; |] let _fsyacc_reductions () = [| -# 445 "SqlParser.fs" +# 452 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> Sql.DmlDdlSqlStatement in Microsoft.FSharp.Core.Operators.box @@ -451,7 +458,7 @@ let _fsyacc_reductions () = [| raise (FSharp.Text.Parsing.Accept(Microsoft.FSharp.Core.Operators.box _1)) ) : 'gentype__startstartCT)); -# 454 "SqlParser.fs" +# 461 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_StatementType in Microsoft.FSharp.Core.Operators.box @@ -462,7 +469,7 @@ let _fsyacc_reductions () = [| ) # 39 "SqlParser.fsp" : Sql.DmlDdlSqlStatement)); -# 465 "SqlParser.fs" +# 472 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _2 = parseState.GetInput(2) :?> 'gentype_CreateStatement in Microsoft.FSharp.Core.Operators.box @@ -473,7 +480,7 @@ let _fsyacc_reductions () = [| ) # 42 "SqlParser.fsp" : 'gentype_StatementType)); -# 476 "SqlParser.fs" +# 483 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _2 = parseState.GetInput(2) :?> 'gentype_DropStatement in Microsoft.FSharp.Core.Operators.box @@ -484,7 +491,7 @@ let _fsyacc_reductions () = [| ) # 43 "SqlParser.fsp" : 'gentype_StatementType)); -# 487 "SqlParser.fs" +# 494 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _2 = parseState.GetInput(2) :?> 'gentype_SelectStatement in Microsoft.FSharp.Core.Operators.box @@ -495,7 +502,7 @@ let _fsyacc_reductions () = [| ) # 44 "SqlParser.fsp" : 'gentype_StatementType)); -# 498 "SqlParser.fs" +# 505 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _2 = parseState.GetInput(2) :?> 'gentype_InsertStatement in Microsoft.FSharp.Core.Operators.box @@ -506,7 +513,7 @@ let _fsyacc_reductions () = [| ) # 45 "SqlParser.fsp" : 'gentype_StatementType)); -# 509 "SqlParser.fs" +# 516 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _2 = parseState.GetInput(2) :?> string in let _5 = parseState.GetInput(5) :?> 'gentype_valueList in @@ -523,7 +530,7 @@ let _fsyacc_reductions () = [| ) # 49 "SqlParser.fsp" : 'gentype_InsertStatement)); -# 526 "SqlParser.fs" +# 533 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_value in Microsoft.FSharp.Core.Operators.box @@ -534,7 +541,7 @@ let _fsyacc_reductions () = [| ) # 57 "SqlParser.fsp" : 'gentype_valueList)); -# 537 "SqlParser.fs" +# 544 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_valueList in let _3 = parseState.GetInput(3) :?> 'gentype_value in @@ -546,7 +553,7 @@ let _fsyacc_reductions () = [| ) # 58 "SqlParser.fsp" : 'gentype_valueList)); -# 549 "SqlParser.fs" +# 556 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _2 = parseState.GetInput(2) :?> string in let _4 = parseState.GetInput(4) :?> 'gentype_columnTypeList in @@ -563,7 +570,7 @@ let _fsyacc_reductions () = [| ) # 62 "SqlParser.fsp" : 'gentype_CreateStatement)); -# 566 "SqlParser.fs" +# 573 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _2 = parseState.GetInput(2) :?> string in Microsoft.FSharp.Core.Operators.box @@ -574,7 +581,7 @@ let _fsyacc_reductions () = [| ) # 70 "SqlParser.fsp" : 'gentype_DropStatement)); -# 577 "SqlParser.fs" +# 584 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_columnType in Microsoft.FSharp.Core.Operators.box @@ -585,7 +592,7 @@ let _fsyacc_reductions () = [| ) # 73 "SqlParser.fsp" : 'gentype_columnTypeList)); -# 588 "SqlParser.fs" +# 595 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_columnTypeList in let _3 = parseState.GetInput(3) :?> 'gentype_columnType in @@ -597,7 +604,7 @@ let _fsyacc_reductions () = [| ) # 74 "SqlParser.fsp" : 'gentype_columnTypeList)); -# 600 "SqlParser.fs" +# 607 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _2 = parseState.GetInput(2) :?> string in Microsoft.FSharp.Core.Operators.box @@ -608,7 +615,7 @@ let _fsyacc_reductions () = [| ) # 77 "SqlParser.fsp" : 'gentype_columnType)); -# 611 "SqlParser.fs" +# 618 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _2 = parseState.GetInput(2) :?> string in Microsoft.FSharp.Core.Operators.box @@ -619,7 +626,7 @@ let _fsyacc_reductions () = [| ) # 78 "SqlParser.fsp" : 'gentype_columnType)); -# 622 "SqlParser.fs" +# 629 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _3 = parseState.GetInput(3) :?> int in let _5 = parseState.GetInput(5) :?> string in @@ -631,7 +638,7 @@ let _fsyacc_reductions () = [| ) # 79 "SqlParser.fsp" : 'gentype_columnType)); -# 634 "SqlParser.fs" +# 641 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_topClause in let _2 = parseState.GetInput(2) :?> 'gentype_columnSelect in @@ -658,7 +665,7 @@ let _fsyacc_reductions () = [| ) # 87 "SqlParser.fsp" : 'gentype_SelectStatement)); -# 661 "SqlParser.fs" +# 668 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _2 = parseState.GetInput(2) :?> string in Microsoft.FSharp.Core.Operators.box @@ -669,7 +676,7 @@ let _fsyacc_reductions () = [| ) # 100 "SqlParser.fsp" : 'gentype_fromStatement)); -# 672 "SqlParser.fs" +# 679 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _4 = parseState.GetInput(4) :?> 'gentype_SelectStatement in Microsoft.FSharp.Core.Operators.box @@ -680,7 +687,7 @@ let _fsyacc_reductions () = [| ) # 101 "SqlParser.fsp" : 'gentype_fromStatement)); -# 683 "SqlParser.fs" +# 690 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _4 = parseState.GetInput(4) :?> 'gentype_value in Microsoft.FSharp.Core.Operators.box @@ -691,7 +698,7 @@ let _fsyacc_reductions () = [| ) # 102 "SqlParser.fsp" : 'gentype_fromStatement)); -# 694 "SqlParser.fs" +# 701 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _4 = parseState.GetInput(4) :?> int in let _7 = parseState.GetInput(7) :?> 'gentype_SelectStatement in @@ -703,264 +710,277 @@ let _fsyacc_reductions () = [| ) # 103 "SqlParser.fsp" : 'gentype_fromStatement)); -# 706 "SqlParser.fs" +# 713 "SqlParser.fs" + (fun (parseState : FSharp.Text.Parsing.IParseState) -> + let _4 = parseState.GetInput(4) :?> int in + let _6 = parseState.GetInput(6) :?> int in + let _9 = parseState.GetInput(9) :?> 'gentype_SelectStatement in + Microsoft.FSharp.Core.Operators.box + ( + ( +# 104 "SqlParser.fsp" + VideoImageProviderSubquery(_9, _4, _6) + ) +# 104 "SqlParser.fsp" + : 'gentype_fromStatement)); +# 726 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _2 = parseState.GetInput(2) :?> int in Microsoft.FSharp.Core.Operators.box ( ( -# 106 "SqlParser.fsp" +# 107 "SqlParser.fsp" Some(_2) ) -# 106 "SqlParser.fsp" +# 107 "SqlParser.fsp" : 'gentype_topClause)); -# 717 "SqlParser.fs" +# 737 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> Microsoft.FSharp.Core.Operators.box ( ( -# 107 "SqlParser.fsp" +# 108 "SqlParser.fsp" None ) -# 107 "SqlParser.fsp" +# 108 "SqlParser.fsp" : 'gentype_topClause)); -# 727 "SqlParser.fs" +# 747 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> Microsoft.FSharp.Core.Operators.box ( ( -# 110 "SqlParser.fsp" +# 111 "SqlParser.fsp" Star ) -# 110 "SqlParser.fsp" +# 111 "SqlParser.fsp" : 'gentype_columnSelect)); -# 737 "SqlParser.fs" +# 757 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_columnList in Microsoft.FSharp.Core.Operators.box ( ( -# 111 "SqlParser.fsp" +# 112 "SqlParser.fsp" ColumnList(List.rev _1) ) -# 111 "SqlParser.fsp" +# 112 "SqlParser.fsp" : 'gentype_columnSelect)); -# 748 "SqlParser.fs" +# 768 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_value in Microsoft.FSharp.Core.Operators.box ( ( -# 114 "SqlParser.fsp" +# 115 "SqlParser.fsp" [ValueOrFunc(Value(_1))] ) -# 114 "SqlParser.fsp" +# 115 "SqlParser.fsp" : 'gentype_columnList)); -# 759 "SqlParser.fs" +# 779 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_columnList in let _3 = parseState.GetInput(3) :?> 'gentype_value in Microsoft.FSharp.Core.Operators.box ( ( -# 115 "SqlParser.fsp" +# 116 "SqlParser.fsp" ValueOrFunc(Value(_3)) :: _1 ) -# 115 "SqlParser.fsp" +# 116 "SqlParser.fsp" : 'gentype_columnList)); -# 771 "SqlParser.fs" +# 791 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_aggregate in Microsoft.FSharp.Core.Operators.box ( ( -# 116 "SqlParser.fsp" +# 117 "SqlParser.fsp" [_1] ) -# 116 "SqlParser.fsp" +# 117 "SqlParser.fsp" : 'gentype_columnList)); -# 782 "SqlParser.fs" +# 802 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_columnList in let _3 = parseState.GetInput(3) :?> 'gentype_aggregate in Microsoft.FSharp.Core.Operators.box ( ( -# 117 "SqlParser.fsp" +# 118 "SqlParser.fsp" _3 :: _1 ) -# 117 "SqlParser.fsp" +# 118 "SqlParser.fsp" : 'gentype_columnList)); -# 794 "SqlParser.fs" +# 814 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_funcCall in Microsoft.FSharp.Core.Operators.box ( ( -# 118 "SqlParser.fsp" +# 119 "SqlParser.fsp" [ValueOrFunc(FuncCall(_1))] ) -# 118 "SqlParser.fsp" +# 119 "SqlParser.fsp" : 'gentype_columnList)); -# 805 "SqlParser.fs" +# 825 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_columnList in let _3 = parseState.GetInput(3) :?> 'gentype_funcCall in Microsoft.FSharp.Core.Operators.box ( ( -# 119 "SqlParser.fsp" +# 120 "SqlParser.fsp" ValueOrFunc(FuncCall(_3)) :: _1 ) -# 119 "SqlParser.fsp" +# 120 "SqlParser.fsp" : 'gentype_columnList)); -# 817 "SqlParser.fs" +# 837 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _3 = parseState.GetInput(3) :?> string in Microsoft.FSharp.Core.Operators.box ( ( -# 122 "SqlParser.fsp" +# 123 "SqlParser.fsp" Aggregate(Max, _3) ) -# 122 "SqlParser.fsp" +# 123 "SqlParser.fsp" : 'gentype_aggregate)); -# 828 "SqlParser.fs" +# 848 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _3 = parseState.GetInput(3) :?> string in Microsoft.FSharp.Core.Operators.box ( ( -# 123 "SqlParser.fsp" +# 124 "SqlParser.fsp" Aggregate(Min, _3) ) -# 123 "SqlParser.fsp" +# 124 "SqlParser.fsp" : 'gentype_aggregate)); -# 839 "SqlParser.fs" +# 859 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _3 = parseState.GetInput(3) :?> string in Microsoft.FSharp.Core.Operators.box ( ( -# 124 "SqlParser.fsp" +# 125 "SqlParser.fsp" Aggregate(Count, _3) ) -# 124 "SqlParser.fsp" +# 125 "SqlParser.fsp" : 'gentype_aggregate)); -# 850 "SqlParser.fs" +# 870 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _3 = parseState.GetInput(3) :?> string in Microsoft.FSharp.Core.Operators.box ( ( -# 125 "SqlParser.fsp" +# 126 "SqlParser.fsp" Aggregate(Sum, _3) ) -# 125 "SqlParser.fsp" +# 126 "SqlParser.fsp" : 'gentype_aggregate)); -# 861 "SqlParser.fs" +# 881 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> Microsoft.FSharp.Core.Operators.box ( ( -# 129 "SqlParser.fsp" +# 130 "SqlParser.fsp" [] ) -# 129 "SqlParser.fsp" +# 130 "SqlParser.fsp" : 'gentype_joinList)); -# 871 "SqlParser.fs" +# 891 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_joinClause in Microsoft.FSharp.Core.Operators.box ( ( -# 130 "SqlParser.fsp" +# 131 "SqlParser.fsp" [_1] ) -# 130 "SqlParser.fsp" +# 131 "SqlParser.fsp" : 'gentype_joinList)); -# 882 "SqlParser.fs" +# 902 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_joinClause in let _2 = parseState.GetInput(2) :?> 'gentype_joinList in Microsoft.FSharp.Core.Operators.box ( ( -# 131 "SqlParser.fsp" +# 132 "SqlParser.fsp" _1 :: _2 ) -# 131 "SqlParser.fsp" +# 132 "SqlParser.fsp" : 'gentype_joinList)); -# 894 "SqlParser.fs" +# 914 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _3 = parseState.GetInput(3) :?> string in let _4 = parseState.GetInput(4) :?> 'gentype_joinOnClause in Microsoft.FSharp.Core.Operators.box ( ( -# 134 "SqlParser.fsp" +# 135 "SqlParser.fsp" _3, Inner, _4 ) -# 134 "SqlParser.fsp" +# 135 "SqlParser.fsp" : 'gentype_joinClause)); -# 906 "SqlParser.fs" +# 926 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _3 = parseState.GetInput(3) :?> string in let _4 = parseState.GetInput(4) :?> 'gentype_joinOnClause in Microsoft.FSharp.Core.Operators.box ( ( -# 135 "SqlParser.fsp" +# 136 "SqlParser.fsp" _3, Left, _4 ) -# 135 "SqlParser.fsp" +# 136 "SqlParser.fsp" : 'gentype_joinClause)); -# 918 "SqlParser.fs" +# 938 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _3 = parseState.GetInput(3) :?> string in let _4 = parseState.GetInput(4) :?> 'gentype_joinOnClause in Microsoft.FSharp.Core.Operators.box ( ( -# 136 "SqlParser.fsp" +# 137 "SqlParser.fsp" _3, Right, _4 ) -# 136 "SqlParser.fsp" +# 137 "SqlParser.fsp" : 'gentype_joinClause)); -# 930 "SqlParser.fs" +# 950 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _2 = parseState.GetInput(2) :?> string in let _3 = parseState.GetInput(3) :?> 'gentype_joinOnClause in Microsoft.FSharp.Core.Operators.box ( ( -# 137 "SqlParser.fsp" +# 138 "SqlParser.fsp" _2, Inner, _3 ) -# 137 "SqlParser.fsp" +# 138 "SqlParser.fsp" : 'gentype_joinClause)); -# 942 "SqlParser.fs" +# 962 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> Microsoft.FSharp.Core.Operators.box ( ( -# 140 "SqlParser.fsp" +# 141 "SqlParser.fsp" None ) -# 140 "SqlParser.fsp" +# 141 "SqlParser.fsp" : 'gentype_joinOnClause)); -# 952 "SqlParser.fs" +# 972 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _2 = parseState.GetInput(2) :?> 'gentype_conditionList in Microsoft.FSharp.Core.Operators.box ( ( -# 141 "SqlParser.fsp" +# 142 "SqlParser.fsp" Some(_2) ) -# 141 "SqlParser.fsp" +# 142 "SqlParser.fsp" : 'gentype_joinOnClause)); -# 963 "SqlParser.fs" +# 983 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_value in let _2 = parseState.GetInput(2) :?> 'gentype_op in @@ -968,12 +988,12 @@ let _fsyacc_reductions () = [| Microsoft.FSharp.Core.Operators.box ( ( -# 144 "SqlParser.fsp" +# 145 "SqlParser.fsp" Cond(Value(_1), _2, Value(_3)) ) -# 144 "SqlParser.fsp" +# 145 "SqlParser.fsp" : 'gentype_conditionList)); -# 976 "SqlParser.fs" +# 996 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_value in let _2 = parseState.GetInput(2) :?> 'gentype_op in @@ -982,12 +1002,12 @@ let _fsyacc_reductions () = [| Microsoft.FSharp.Core.Operators.box ( ( -# 145 "SqlParser.fsp" +# 146 "SqlParser.fsp" And(Cond(Value(_1), _2, Value(_3)), _5) ) -# 145 "SqlParser.fsp" +# 146 "SqlParser.fsp" : 'gentype_conditionList)); -# 990 "SqlParser.fs" +# 1010 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_value in let _2 = parseState.GetInput(2) :?> 'gentype_op in @@ -996,12 +1016,12 @@ let _fsyacc_reductions () = [| Microsoft.FSharp.Core.Operators.box ( ( -# 146 "SqlParser.fsp" +# 147 "SqlParser.fsp" Or(Cond(Value(_1), _2, Value(_3)), _5) ) -# 146 "SqlParser.fsp" +# 147 "SqlParser.fsp" : 'gentype_conditionList)); -# 1004 "SqlParser.fs" +# 1024 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_value in let _2 = parseState.GetInput(2) :?> 'gentype_op in @@ -1009,12 +1029,12 @@ let _fsyacc_reductions () = [| Microsoft.FSharp.Core.Operators.box ( ( -# 147 "SqlParser.fsp" +# 148 "SqlParser.fsp" Cond(Value(_1), _2, FuncCall(_3)) ) -# 147 "SqlParser.fsp" +# 148 "SqlParser.fsp" : 'gentype_conditionList)); -# 1017 "SqlParser.fs" +# 1037 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_funcCall in let _2 = parseState.GetInput(2) :?> 'gentype_op in @@ -1022,12 +1042,12 @@ let _fsyacc_reductions () = [| Microsoft.FSharp.Core.Operators.box ( ( -# 148 "SqlParser.fsp" +# 149 "SqlParser.fsp" Cond(FuncCall(_1), _2, Value(_3)) ) -# 148 "SqlParser.fsp" +# 149 "SqlParser.fsp" : 'gentype_conditionList)); -# 1030 "SqlParser.fs" +# 1050 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_value in let _2 = parseState.GetInput(2) :?> 'gentype_op in @@ -1036,12 +1056,12 @@ let _fsyacc_reductions () = [| Microsoft.FSharp.Core.Operators.box ( ( -# 149 "SqlParser.fsp" +# 150 "SqlParser.fsp" And(Cond(Value(_1), _2, FuncCall(_3)), _5) ) -# 149 "SqlParser.fsp" +# 150 "SqlParser.fsp" : 'gentype_conditionList)); -# 1044 "SqlParser.fs" +# 1064 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_funcCall in let _2 = parseState.GetInput(2) :?> 'gentype_op in @@ -1050,282 +1070,282 @@ let _fsyacc_reductions () = [| Microsoft.FSharp.Core.Operators.box ( ( -# 150 "SqlParser.fsp" +# 151 "SqlParser.fsp" Or(Cond(FuncCall(_1), _2, Value(_3)), _5) ) -# 150 "SqlParser.fsp" +# 151 "SqlParser.fsp" : 'gentype_conditionList)); -# 1058 "SqlParser.fs" +# 1078 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> Microsoft.FSharp.Core.Operators.box ( ( -# 154 "SqlParser.fsp" +# 155 "SqlParser.fsp" None ) -# 154 "SqlParser.fsp" +# 155 "SqlParser.fsp" : 'gentype_whereClause)); -# 1068 "SqlParser.fs" +# 1088 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _2 = parseState.GetInput(2) :?> 'gentype_conditionList in Microsoft.FSharp.Core.Operators.box ( ( -# 155 "SqlParser.fsp" +# 156 "SqlParser.fsp" Some(_2) ) -# 155 "SqlParser.fsp" +# 156 "SqlParser.fsp" : 'gentype_whereClause)); -# 1079 "SqlParser.fs" +# 1099 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> Microsoft.FSharp.Core.Operators.box ( ( -# 157 "SqlParser.fsp" +# 158 "SqlParser.fsp" Eq ) -# 157 "SqlParser.fsp" +# 158 "SqlParser.fsp" : 'gentype_op)); -# 1089 "SqlParser.fs" +# 1109 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> Microsoft.FSharp.Core.Operators.box ( ( -# 157 "SqlParser.fsp" +# 158 "SqlParser.fsp" Lt ) -# 157 "SqlParser.fsp" +# 158 "SqlParser.fsp" : 'gentype_op)); -# 1099 "SqlParser.fs" +# 1119 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> Microsoft.FSharp.Core.Operators.box ( ( -# 157 "SqlParser.fsp" +# 158 "SqlParser.fsp" Le ) -# 157 "SqlParser.fsp" +# 158 "SqlParser.fsp" : 'gentype_op)); -# 1109 "SqlParser.fs" +# 1129 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> Microsoft.FSharp.Core.Operators.box ( ( -# 157 "SqlParser.fsp" +# 158 "SqlParser.fsp" Gt ) -# 157 "SqlParser.fsp" +# 158 "SqlParser.fsp" : 'gentype_op)); -# 1119 "SqlParser.fs" +# 1139 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> Microsoft.FSharp.Core.Operators.box ( ( -# 157 "SqlParser.fsp" +# 158 "SqlParser.fsp" Ge ) -# 157 "SqlParser.fsp" +# 158 "SqlParser.fsp" : 'gentype_op)); -# 1129 "SqlParser.fs" +# 1149 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> int in Microsoft.FSharp.Core.Operators.box ( ( -# 160 "SqlParser.fsp" +# 161 "SqlParser.fsp" Int(_1) ) -# 160 "SqlParser.fsp" +# 161 "SqlParser.fsp" : 'gentype_value)); -# 1140 "SqlParser.fs" +# 1160 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> float in Microsoft.FSharp.Core.Operators.box ( ( -# 161 "SqlParser.fsp" +# 162 "SqlParser.fsp" Float(_1) ) -# 161 "SqlParser.fsp" +# 162 "SqlParser.fsp" : 'gentype_value)); -# 1151 "SqlParser.fs" +# 1171 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _2 = parseState.GetInput(2) :?> string in Microsoft.FSharp.Core.Operators.box ( ( -# 162 "SqlParser.fsp" +# 163 "SqlParser.fsp" String(_2) ) -# 162 "SqlParser.fsp" +# 163 "SqlParser.fsp" : 'gentype_value)); -# 1162 "SqlParser.fs" +# 1182 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _2 = parseState.GetInput(2) :?> float in Microsoft.FSharp.Core.Operators.box ( ( -# 163 "SqlParser.fsp" +# 164 "SqlParser.fsp" String(string _2) ) -# 163 "SqlParser.fsp" +# 164 "SqlParser.fsp" : 'gentype_value)); -# 1173 "SqlParser.fs" +# 1193 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _2 = parseState.GetInput(2) :?> int in Microsoft.FSharp.Core.Operators.box ( ( -# 164 "SqlParser.fsp" +# 165 "SqlParser.fsp" String(string _2) ) -# 164 "SqlParser.fsp" +# 165 "SqlParser.fsp" : 'gentype_value)); -# 1184 "SqlParser.fs" +# 1204 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> string in Microsoft.FSharp.Core.Operators.box ( ( -# 165 "SqlParser.fsp" +# 166 "SqlParser.fsp" Id(_1) ) -# 165 "SqlParser.fsp" +# 166 "SqlParser.fsp" : 'gentype_value)); -# 1195 "SqlParser.fs" +# 1215 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> Microsoft.FSharp.Core.Operators.box ( ( -# 169 "SqlParser.fsp" +# 170 "SqlParser.fsp" [] ) -# 169 "SqlParser.fsp" +# 170 "SqlParser.fsp" : 'gentype_groupByClause)); -# 1205 "SqlParser.fs" +# 1225 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _3 = parseState.GetInput(3) :?> 'gentype_groupByList in Microsoft.FSharp.Core.Operators.box ( ( -# 170 "SqlParser.fsp" +# 171 "SqlParser.fsp" _3 ) -# 170 "SqlParser.fsp" +# 171 "SqlParser.fsp" : 'gentype_groupByClause)); -# 1216 "SqlParser.fs" +# 1236 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> string in Microsoft.FSharp.Core.Operators.box ( ( -# 173 "SqlParser.fsp" +# 174 "SqlParser.fsp" [_1] ) -# 173 "SqlParser.fsp" +# 174 "SqlParser.fsp" : 'gentype_groupByList)); -# 1227 "SqlParser.fs" +# 1247 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> string in let _3 = parseState.GetInput(3) :?> 'gentype_groupByList in Microsoft.FSharp.Core.Operators.box ( ( -# 174 "SqlParser.fsp" +# 175 "SqlParser.fsp" _1 :: _3 ) -# 174 "SqlParser.fsp" +# 175 "SqlParser.fsp" : 'gentype_groupByList)); -# 1239 "SqlParser.fs" +# 1259 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> Microsoft.FSharp.Core.Operators.box ( ( -# 178 "SqlParser.fsp" +# 179 "SqlParser.fsp" [] ) -# 178 "SqlParser.fsp" +# 179 "SqlParser.fsp" : 'gentype_orderByClause)); -# 1249 "SqlParser.fs" +# 1269 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _3 = parseState.GetInput(3) :?> 'gentype_orderByList in Microsoft.FSharp.Core.Operators.box ( ( -# 179 "SqlParser.fsp" +# 180 "SqlParser.fsp" _3 ) -# 179 "SqlParser.fsp" +# 180 "SqlParser.fsp" : 'gentype_orderByClause)); -# 1260 "SqlParser.fs" +# 1280 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_orderBy in Microsoft.FSharp.Core.Operators.box ( ( -# 182 "SqlParser.fsp" +# 183 "SqlParser.fsp" [_1] ) -# 182 "SqlParser.fsp" +# 183 "SqlParser.fsp" : 'gentype_orderByList)); -# 1271 "SqlParser.fs" +# 1291 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> 'gentype_orderBy in let _3 = parseState.GetInput(3) :?> 'gentype_orderByList in Microsoft.FSharp.Core.Operators.box ( ( -# 183 "SqlParser.fsp" +# 184 "SqlParser.fsp" _1 :: _3 ) -# 183 "SqlParser.fsp" +# 184 "SqlParser.fsp" : 'gentype_orderByList)); -# 1283 "SqlParser.fs" +# 1303 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> string in Microsoft.FSharp.Core.Operators.box ( ( -# 186 "SqlParser.fsp" +# 187 "SqlParser.fsp" _1, Asc ) -# 186 "SqlParser.fsp" +# 187 "SqlParser.fsp" : 'gentype_orderBy)); -# 1294 "SqlParser.fs" +# 1314 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> string in Microsoft.FSharp.Core.Operators.box ( ( -# 187 "SqlParser.fsp" +# 188 "SqlParser.fsp" _1, Asc ) -# 187 "SqlParser.fsp" +# 188 "SqlParser.fsp" : 'gentype_orderBy)); -# 1305 "SqlParser.fs" +# 1325 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> string in Microsoft.FSharp.Core.Operators.box ( ( -# 188 "SqlParser.fsp" +# 189 "SqlParser.fsp" _1, Desc ) -# 188 "SqlParser.fsp" +# 189 "SqlParser.fsp" : 'gentype_orderBy)); -# 1316 "SqlParser.fs" +# 1336 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> string in let _3 = parseState.GetInput(3) :?> 'gentype_value in Microsoft.FSharp.Core.Operators.box ( ( -# 191 "SqlParser.fsp" +# 192 "SqlParser.fsp" (_1, Args1(_3)) ) -# 191 "SqlParser.fsp" +# 192 "SqlParser.fsp" : 'gentype_funcCall)); -# 1328 "SqlParser.fs" +# 1348 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> string in let _3 = parseState.GetInput(3) :?> 'gentype_value in @@ -1333,12 +1353,12 @@ let _fsyacc_reductions () = [| Microsoft.FSharp.Core.Operators.box ( ( -# 192 "SqlParser.fsp" +# 193 "SqlParser.fsp" (_1, Args2(_3, _5)) ) -# 192 "SqlParser.fsp" +# 193 "SqlParser.fsp" : 'gentype_funcCall)); -# 1341 "SqlParser.fs" +# 1361 "SqlParser.fs" (fun (parseState : FSharp.Text.Parsing.IParseState) -> let _1 = parseState.GetInput(1) :?> string in let _3 = parseState.GetInput(3) :?> 'gentype_value in @@ -1347,13 +1367,13 @@ let _fsyacc_reductions () = [| Microsoft.FSharp.Core.Operators.box ( ( -# 193 "SqlParser.fsp" +# 194 "SqlParser.fsp" (_1, Args3(_3, _5, _7)) ) -# 193 "SqlParser.fsp" +# 194 "SqlParser.fsp" : 'gentype_funcCall)); |] -# 1356 "SqlParser.fs" +# 1376 "SqlParser.fs" let tables : FSharp.Text.Parsing.Tables<_> = { reductions= _fsyacc_reductions (); endOfInputTag = _fsyacc_endOfInputTag; @@ -1372,7 +1392,7 @@ let tables : FSharp.Text.Parsing.Tables<_> = match parse_error_rich with | Some f -> f ctxt | None -> parse_error ctxt.Message); - numTerminals = 50; + numTerminals = 51; productionToNonTerminalTable = _fsyacc_productionToNonTerminalTable } let engine lexer lexbuf startState = tables.Interpret(lexer, lexbuf, startState) let startCT lexer lexbuf : Sql.DmlDdlSqlStatement = diff --git a/ParserLexerFSharp/SqlParser.fsi b/ParserLexerFSharp/SqlParser.fsi index 6ce798e..e88fa84 100644 --- a/ParserLexerFSharp/SqlParser.fsi +++ b/ParserLexerFSharp/SqlParser.fsi @@ -4,6 +4,7 @@ type token = | TOP | FILESYSTEM | VIDEO_CHUNKER + | VIDEO_TO_IMAGE | STAR | QUOT | EOF @@ -52,6 +53,7 @@ type tokenId = | TOKEN_TOP | TOKEN_FILESYSTEM | TOKEN_VIDEO_CHUNKER + | TOKEN_VIDEO_TO_IMAGE | TOKEN_STAR | TOKEN_QUOT | TOKEN_EOF diff --git a/ParserLexerFSharp/SqlParser.fsp b/ParserLexerFSharp/SqlParser.fsp index 9f66fb6..4acb1f8 100644 --- a/ParserLexerFSharp/SqlParser.fsp +++ b/ParserLexerFSharp/SqlParser.fsp @@ -27,7 +27,7 @@ open Sql %token EOF %token QUOT %token STAR -%token FILESYSTEM VIDEO_CHUNKER +%token FILESYSTEM VIDEO_CHUNKER VIDEO_TO_IMAGE %token TOP %start startCT @@ -101,6 +101,7 @@ fromStatement: | FROM OBRCK SELECT SelectStatement CBRCK { FromSubquery($4) } | FROM FILESYSTEM OBRCK value CBRCK { FileSystemProvider($4) } | FROM VIDEO_CHUNKER OBRCK INT COMMA SELECT SelectStatement CBRCK { VideoChunkProviderSubquery($7, $4) } + | FROM VIDEO_TO_IMAGE OBRCK INT COMMA INT COMMA SELECT SelectStatement CBRCK { VideoImageProviderSubquery($9, $4, $6) } topClause: | TOP INT { Some($2) } diff --git a/QueryProcessing/Builders/AstToOpTreeBuilder.cs b/QueryProcessing/Builders/AstToOpTreeBuilder.cs index b239737..d0a5792 100644 --- a/QueryProcessing/Builders/AstToOpTreeBuilder.cs +++ b/QueryProcessing/Builders/AstToOpTreeBuilder.cs @@ -59,10 +59,11 @@ public class AstToOpTreeBuilder public AstToOpTreeBuilder( MetadataManager.MetadataManager metadataManager, // TODO: All external operations that are linked to ops should go here. - SourceProvidersSignatures.VideoChunkerProvider sourceVideoChunker = null) + SourceProvidersSignatures.VideoChunkerProvider sourceVideoChunker = null, + SourceProvidersSignatures.VideoToImageProvider sourceVideoToImageProvider = null) { this.metadataManager = metadataManager; - statementBuildersList.Add(new SourceOpBuilder(metadataManager, this, sourceVideoChunker)); + statementBuildersList.Add(new SourceOpBuilder(metadataManager, this, sourceVideoChunker, sourceVideoToImageProvider)); statementBuildersList.Add(new JoinOpBuilder(metadataManager)); statementBuildersList.Add(new FilterStatementBuilder()); statementBuildersList.Add(new AggGroupOpBuilder()); @@ -70,7 +71,6 @@ public class AstToOpTreeBuilder statementBuildersList.Add(new ProjectOpBuilder()); } - public async Task ParseSqlStatement(Sql.sqlStatement sqlStatement, ITransaction tran, InputStringNormalizer stringNormalizer) { // TODO: query builder is currently manual. i.e. SCAN -> optional(JOINS) -> optional(FILTER) -> GROUP BY -> ORDER BY/PROJECT. diff --git a/QueryProcessing/Builders/ProjectOpBuilder.cs b/QueryProcessing/Builders/ProjectOpBuilder.cs index 69dfcad..16bc36c 100644 --- a/QueryProcessing/Builders/ProjectOpBuilder.cs +++ b/QueryProcessing/Builders/ProjectOpBuilder.cs @@ -40,6 +40,13 @@ private MetadataColumn[] GetOutputSchema(Sql.columnSelect[] columns, IPhysicalOp var func = ((Sql.valueOrFunc.FuncCall)valueOrFunc.Item); result[pos] = FuncCallMapper.GetMetadataInfoForOutput(func, source.GetOutputColumns()); } + else + { + throw new NotImplementedException(); + } + + // Update column position. + result[pos] = result[pos].SetNewColumnPosition(pos); pos++; } diff --git a/QueryProcessing/Builders/SourceOpBuilder.cs b/QueryProcessing/Builders/SourceOpBuilder.cs index 9ddffff..debcae5 100644 --- a/QueryProcessing/Builders/SourceOpBuilder.cs +++ b/QueryProcessing/Builders/SourceOpBuilder.cs @@ -12,15 +12,18 @@ class SourceOpBuilder : IStatementTreeBuilder private AstToOpTreeBuilder nestedStatementBuilder; private SourceProvidersSignatures.VideoChunkerProvider videoChunkProvider; + private SourceProvidersSignatures.VideoToImageProvider videoToImageProvider; public SourceOpBuilder( MetadataManager.MetadataManager metadataManager, AstToOpTreeBuilder nestedStatementBuilder, - SourceProvidersSignatures.VideoChunkerProvider videoChunkProvider) + SourceProvidersSignatures.VideoChunkerProvider videoChunkProvider, + SourceProvidersSignatures.VideoToImageProvider videoToImageProvider) { this.metadataManager = metadataManager; this.nestedStatementBuilder = nestedStatementBuilder; this.videoChunkProvider = videoChunkProvider; + this.videoToImageProvider = videoToImageProvider; } public void RegisterVideoChunkProvider(SourceProvidersSignatures.VideoChunkerProvider func) @@ -85,6 +88,20 @@ public async Task> BuildStatement(Sql.sqlStatement return new PhyOpVideoChunker(rowProvider, chunkSize, this.videoChunkProvider); } + else if (statement.From.IsVideoImageProviderSubquery) + { + if (this.videoToImageProvider == null) + { + throw new SourceProviderNotSetException(); + } + + Sql.sqlStatement nestedSqlStatement = ((Sql.sqlStatementOrId.VideoImageProviderSubquery)statement.From).Item1; + int framesPerDuration = ((Sql.sqlStatementOrId.VideoImageProviderSubquery)statement.From).Item2; + int durationInSeconds = ((Sql.sqlStatementOrId.VideoImageProviderSubquery)statement.From).Item3; + RowProvider rowProvider = await nestedStatementBuilder.ParseSqlStatement(nestedSqlStatement, tran, stringNormalizer); + + return new PhyOpVideoToImage(rowProvider, framesPerDuration, durationInSeconds, this.videoToImageProvider); + } throw new ArgumentException("Scan can only be done from Table or from Subquery"); } diff --git a/QueryProcessing/Functions/FuncCallMapper.cs b/QueryProcessing/Functions/FuncCallMapper.cs index 9cd8450..67d9dcd 100644 --- a/QueryProcessing/Functions/FuncCallMapper.cs +++ b/QueryProcessing/Functions/FuncCallMapper.cs @@ -5,6 +5,7 @@ using QueryProcessing.Exceptions; using System.Collections.Generic; using QueryProcessing.Functions; +using System.Linq; namespace QueryProcessing { @@ -19,6 +20,7 @@ private struct MetadataOutputFunctorBuilderPair public Func /* ret - Action mapper */> FunctorBuilder; public Func> FunctionReturnValueBuilder; + public bool External; } // TODO: Mapping handlers should be singletons. @@ -75,6 +77,7 @@ private struct MetadataOutputFunctorBuilderPair GetMetadataInfoForOutput = (func, mds) => addMappingHandler.GetMetadataInfoForOutput(func, mds), FunctorBuilder = (func, output, mds) => FunctionBuilder(func, output, mds, addMappingHandler), FunctionReturnValueBuilder = (func, mds) => FunctionResultBuilder(func, mds, addMappingHandler), + External = false, } }, { @@ -83,6 +86,7 @@ private struct MetadataOutputFunctorBuilderPair GetMetadataInfoForOutput = (func, mds) => concatMappingHandler.GetMetadataInfoForOutput(func, mds), FunctorBuilder = (func, output, mds) => FunctionBuilder(func, output, mds, concatMappingHandler), FunctionReturnValueBuilder = (func, mds) => FunctionResultBuilder(func, mds, concatMappingHandler), + External = false, } } }; @@ -98,9 +102,20 @@ public static void RegisterFunc(string functionName, IFunctionMappingHandler map GetMetadataInfoForOutput = (func, mds) => mappingHandler.GetMetadataInfoForOutput(func, mds), FunctorBuilder = (func, output, mds) => FunctionBuilder(func, output, mds, mappingHandler), FunctionReturnValueBuilder = (func, mds) => FunctionResultBuilder(func, mds, mappingHandler), + External = true, }); } + public static void ClearExternalFuncs() + { + string[] externalFuncNames = FuncDictionary.Where(kv => kv.Value.External == true).Select(kv => kv.Key).ToArray(); + + foreach (string val in externalFuncNames) + { + FuncDictionary.Remove(val); + } + } + public static MetadataColumn GetMetadataInfoForOutput(Sql.valueOrFunc.FuncCall func, MetadataColumn[] sourceInput) { string funcName = func.Item.Item1; diff --git a/QueryProcessing/PhyOperators/PhyOpScan.cs b/QueryProcessing/PhyOperators/PhyOpScan.cs index adbe923..2f1430f 100644 --- a/QueryProcessing/PhyOperators/PhyOpScan.cs +++ b/QueryProcessing/PhyOperators/PhyOpScan.cs @@ -27,6 +27,103 @@ public PhyOpRowForwarder(RowProvider rowProvider) public IAsyncEnumerable Iterate(ITransaction tran) => rowProvider.Enumerator; } + public class PhyOpVideoToImage : IPhysicalOperator + { + private RowProvider rowProvider; + private VideoToImageProvider videoToImageProvider; + private const string FilePathField = "chunk_path"; + private MetadataColumn[] outputColumns; + private int framesPerDuration; + private int durationInSeconds; + + private MetadataColumn[] extensionColumns = new[] + { + new MetadataColumn(0, 0, "frame_path", new ColumnInfo(ColumnType.String, 256)), // Chunk path + }; + + public PhyOpVideoToImage(RowProvider rowProvider, int framesPerDuration, int durationInSeconds, VideoToImageProvider videoToImageProvider) + { + this.rowProvider = rowProvider; + this.videoToImageProvider = videoToImageProvider; + this.framesPerDuration = framesPerDuration; + this.durationInSeconds = durationInSeconds; + + this.outputColumns = new MetadataColumn[rowProvider.ColumnInfo.Length + this.extensionColumns.Length]; + rowProvider.ColumnInfo.CopyTo(outputColumns, 0); + + int extensionPosition = 0; + for (int i = rowProvider.ColumnInfo.Length; i < outputColumns.Length; i++) + { + outputColumns[i] = new MetadataColumn( + extensionColumns[extensionPosition].ColumnId + rowProvider.ColumnInfo.Length, + extensionColumns[extensionPosition].TableId, + extensionColumns[extensionPosition].ColumnName, + extensionColumns[extensionPosition].ColumnType); + extensionPosition++; + } + } + + public MetadataColumn[] GetOutputColumns() => this.outputColumns; + + public async IAsyncEnumerable Iterate(ITransaction tran) + { + int filePathColumnId = -1; + foreach (MetadataColumn md in this.rowProvider.ColumnInfo) + { + if (md.ColumnName == FilePathField) + { + filePathColumnId = md.ColumnId; + + if (md.ColumnType.ColumnType != ColumnType.String && md.ColumnType.ColumnType != ColumnType.StringPointer) + { + throw new FilePathColumnNotStringException(); + } + + break; + } + } + + if (filePathColumnId == -1) + { + throw new FilePathColumnDoesntExist(); + } + + ProjectExtendInfo.MappingType[] mappingTypes = new ProjectExtendInfo.MappingType[rowProvider.ColumnInfo.Length + extensionColumns.Length]; + + for (int i = 0; i < rowProvider.ColumnInfo.Length; i++) + { + mappingTypes[i] = ProjectExtendInfo.MappingType.Projection; + } + + for (int i = rowProvider.ColumnInfo.Length; i < mappingTypes.Length; i++) + { + mappingTypes[i] = ProjectExtendInfo.MappingType.Extension; + } + + int[] projectSourcePositions = new int[rowProvider.ColumnInfo.Length]; + for (int i = 0; i < projectSourcePositions.Length; i++) + { + projectSourcePositions[i] = i; + } + + ProjectExtendInfo extendInfo = new ProjectExtendInfo(mappingTypes, projectSourcePositions, extensionColumns.Select(ec => ec.ColumnType).ToArray()); + + await foreach (RowHolder row in rowProvider.Enumerator) + { + string filePath = new string(row.GetStringField(filePathColumnId)); + + ExtractedImageResult[] extractedImageResults = await this.videoToImageProvider(filePath, this.framesPerDuration, this.durationInSeconds, tran); + foreach (ExtractedImageResult imageResult in extractedImageResults) + { + RowHolder expended = row.ProjectAndExtend(extendInfo); + expended.SetField(rowProvider.ColumnInfo.Length + 0, imageResult.Path.ToCharArray()); + + yield return expended; + } + } + } + } + public class PhyOpVideoChunker : IPhysicalOperator { private RowProvider rowProvider; diff --git a/QueryProcessing/QueryEntryGate.cs b/QueryProcessing/QueryEntryGate.cs index 5342051..4d34a2f 100644 --- a/QueryProcessing/QueryEntryGate.cs +++ b/QueryProcessing/QueryEntryGate.cs @@ -14,6 +14,11 @@ public class QueryEntryGate public QueryEntryGate(IEnumerable statementHandlers) { this.statementHandlers = statementHandlers; + + // Clean all external funcs. + // TODO: This is a hack because func registration is currently static. + // FuncMapper should be non static class owned by TreeBuilder. + FuncCallMapper.ClearExternalFuncs(); } private Sql.DmlDdlSqlStatement BuildStatement(string query, InputStringNormalizer stringNormalizer) diff --git a/QueryProcessing/SourceProvidersSignatures.cs b/QueryProcessing/SourceProvidersSignatures.cs index af3f213..d23492c 100644 --- a/QueryProcessing/SourceProvidersSignatures.cs +++ b/QueryProcessing/SourceProvidersSignatures.cs @@ -17,6 +17,13 @@ public struct VideoChunkerResult public int BitRate; } + public struct ExtractedImageResult + { + public string Path; + } + public delegate Task VideoChunkerProvider(string videoPath, TimeSpan timespan, ITransaction tran); + + public delegate Task VideoToImageProvider(string videoPath, int framesPerDuration, int durationInSeconds, ITransaction tran); } } diff --git a/VideoProcessing/FfmpegFrameExtractor.cs b/VideoProcessing/FfmpegFrameExtractor.cs new file mode 100644 index 0000000..712c6d9 --- /dev/null +++ b/VideoProcessing/FfmpegFrameExtractor.cs @@ -0,0 +1,92 @@ +using PageManager; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Threading; +using System.Threading.Tasks; + +namespace VideoProcessing +{ + public class FfmpegFrameExtractor + { + private const string ffArgsFormat = "-hide_banner -i {0} -filter:v fps=fps={1}/{2} {3}.bmp"; + private readonly string tempDestination; + private readonly IVideoProcessingInstrumentationInterface logger; + + public FfmpegFrameExtractor(string tempDestination, IVideoProcessingInstrumentationInterface logger) + { + this.tempDestination = tempDestination; + this.logger = logger; + } + + private ProcessStartInfo CreateProcessStartInfo(string ffmpegArgs) + { + ProcessStartInfo pci = new ProcessStartInfo(); + if (OperatingSystem.IsWindows()) + { + FileInfo dataRoot = new FileInfo(typeof(FfmpegProbeWrapper).Assembly.Location); + string assemblyFolderPath = dataRoot.Directory.FullName; + pci.FileName = Path.Combine(assemblyFolderPath, "ffmpeg/ffmpeg.exe"); + pci.Arguments = ffmpegArgs; + + } + else if (OperatingSystem.IsLinux()) + { + // use bash + ffmpeg. + // This means that ffmpeg needs to be installed. + // TODO: Error handling if ffmpeg isn't installed/bash is not used etc. + // For now this is only to pass basic test on Ubuntu when everything is correctly preinstalled. + pci.FileName = "/bin/bash"; + pci.Arguments = $"-c \"ffmpeg {ffmpegArgs}\""; + } + else + { + throw new NotImplementedException("Os currently not supported"); + } + + pci.UseShellExecute = false; + pci.RedirectStandardOutput = true; + pci.RedirectStandardError = true; + + return pci; + } + + public async Task Execute(string fileName, int numOfFramesPerDuration, int numOfSecondsPerCapture, ITransaction tran, CancellationToken token) + { + FileInfo fi = new FileInfo(fileName); + string outputFileName = Path.GetFileNameWithoutExtension(fi.Name) + "%03d" + ".bmp"; + + string destinationDir = Path.Combine(tempDestination, Guid.NewGuid().ToString()); + DirectoryInfo tempDir = Directory.CreateDirectory(destinationDir); + tran.RegisterTempFolder(tempDir); + string outputDestination = Path.Combine(destinationDir, outputFileName); + + string arguments = string.Format(ffArgsFormat, fileName, numOfFramesPerDuration, numOfSecondsPerCapture, outputDestination); + + ProcessStartInfo pci = CreateProcessStartInfo(arguments); + using (Process proc = Process.Start(pci)) + { + this.logger.LogDebug($"Running Process name {proc.ProcessName} with id {proc.Id}."); + await proc.WaitForExitAsync(token); + this.logger.LogDebug($"Process Id {proc.Id} exited with exit code {proc.ExitCode}."); + + if (!proc.StandardOutput.EndOfStream) + { + string output = await proc.StandardOutput.ReadToEndAsync(); + output = $"Process id {proc.Id} standard output: " + Environment.NewLine + output; + this.logger.LogDebug(output); + } + + if (!proc.StandardError.EndOfStream) + { + string output = await proc.StandardError.ReadToEndAsync(); + output = $"Process id {proc.Id} standard output: " + Environment.NewLine + output; + this.logger.LogDebug(output); + } + } + + return Directory.GetFiles(destinationDir); + } + } +} diff --git a/VideoProcessing/SourceRegistration.cs b/VideoProcessing/SourceRegistration.cs index 38541a0..135fd96 100644 --- a/VideoProcessing/SourceRegistration.cs +++ b/VideoProcessing/SourceRegistration.cs @@ -33,5 +33,23 @@ public static VideoChunkerProvider VideoChunkerCallback(FfmpegVideoChunker video return chunkerResult; }; } + + public static VideoToImageProvider VideoToImageCallback(FfmpegFrameExtractor frameExtractor) + { + return async (string path, int framesPerDuration, int durationInSeconds, ITransaction tran) => + { + string[] chunkPaths = await frameExtractor.Execute(path, framesPerDuration, durationInSeconds, tran, CancellationToken.None); + ExtractedImageResult[] extractorResults = new ExtractedImageResult[chunkPaths.Length]; + + int i = 0; + foreach (string imagePath in chunkPaths) + { + extractorResults[i].Path = imagePath; + i++; + } + + return extractorResults; + }; + } } } diff --git a/tests/E2EQueryExecutionTests/BaseTestSetup.cs b/tests/E2EQueryExecutionTests/BaseTestSetup.cs index 7c8ba43..2f1e151 100644 --- a/tests/E2EQueryExecutionTests/BaseTestSetup.cs +++ b/tests/E2EQueryExecutionTests/BaseTestSetup.cs @@ -1,4 +1,5 @@ using DataStructures; +using ImageProcessing; using LogManager; using PageManager; using QueryProcessing; @@ -43,7 +44,10 @@ await using (ITransaction tran = this.logManager.CreateTransaction(pageManager, var videoChunker = new FfmpegVideoChunker(GetTempFolderPath(), TestGlobals.TestFileLogger); var videoProbe = new FfmpegProbeWrapper(TestGlobals.TestFileLogger); var videoChunkerCallback = SourceRegistration.VideoChunkerCallback(videoChunker, videoProbe); - AstToOpTreeBuilder treeBuilder = new AstToOpTreeBuilder(metadataManager, videoChunkerCallback); + + var videoToImage = new FfmpegFrameExtractor(GetTempFolderPath(), TestGlobals.TestFileLogger); + var videoToImageCallback = SourceRegistration.VideoToImageCallback(videoToImage); + AstToOpTreeBuilder treeBuilder = new AstToOpTreeBuilder(metadataManager, videoChunkerCallback, videoToImageCallback); this.queryEntryGate = new QueryEntryGate( statementHandlers: new ISqlStatement[] @@ -52,6 +56,10 @@ await using (ITransaction tran = this.logManager.CreateTransaction(pageManager, new InsertIntoTableStatement(treeBuilder), new SelectStatement(treeBuilder), }); + + IFunctionMappingHandler mappingHandler = new ImageObjectClassificationFuncMappingHandler(); + this.queryEntryGate.RegisterExternalFunction("CLASSIFY_IMAGE", mappingHandler); + } } } diff --git a/tests/E2EQueryExecutionTests/FileSystemProviderTests.cs b/tests/E2EQueryExecutionTests/FileSystemProviderTests.cs index d7a11d7..4ac399b 100644 --- a/tests/E2EQueryExecutionTests/FileSystemProviderTests.cs +++ b/tests/E2EQueryExecutionTests/FileSystemProviderTests.cs @@ -1,4 +1,5 @@ -using NUnit.Framework; +using ImageProcessing; +using NUnit.Framework; using PageManager; using QueryProcessing; using System.Collections.Generic; @@ -122,5 +123,33 @@ public async Task VideoChunkerTest() Assert.AreEqual(rowProvider.GetValue(row, "FormatName"), "matroska,webm"); } } + + [Test] + public async Task VideoImageExtraction() + { + await using ITransaction tran = this.logManager.CreateTransaction(pageManager, "GET_ROWS"); + // Extract 1 frame every 5s + // chunk to 20s chunks + const string query = + @" +SELECT chunk_path, frame_path, FilePath, CLASSIFY_IMAGE(frame_path) +FROM VIDEO_TO_IMAGE(1, 5, + SELECT * FROM VIDEO_CHUNKER(20, SELECT * FROM FILESYSTEM('./assets/videos') + WHERE Extension = '.mkv'))"; + RowHolder[] result = await this.queryEntryGate.Execute(query, tran).ToArrayAsync(); + await tran.Commit(); + + RowProvider rowProvider = await this.queryEntryGate.BuildExecutionTree(query, tran); + + RowHolder[] rows = await rowProvider.Enumerator.ToArrayAsync(); + Assert.AreEqual(9, rows.Length); + + foreach (RowHolder row in rows) + { + string filePath = rowProvider.GetValue(row, "FilePath"); + string chunkPath= rowProvider.GetValue(row, "chunk_path"); + string framePath = rowProvider.GetValue(row, "frame_path"); + } + } } } diff --git a/tests/E2EQueryExecutionTests/ImageClassificationTests.cs b/tests/E2EQueryExecutionTests/ImageClassificationTests.cs index dd95276..b8d7d6a 100644 --- a/tests/E2EQueryExecutionTests/ImageClassificationTests.cs +++ b/tests/E2EQueryExecutionTests/ImageClassificationTests.cs @@ -14,9 +14,6 @@ public class ImageClassificationTests : BaseTestSetup public new async Task Setup() { await base.Setup(); - IFunctionMappingHandler mappingHandler = new ImageObjectClassificationFuncMappingHandler(); - - this.queryEntryGate.RegisterExternalFunction("CLASSIFY_IMAGE", mappingHandler); } [Test] diff --git a/tests/ParserLexerTests/ParserTests.cs b/tests/ParserLexerTests/ParserTests.cs index 3b51794..cff9c9b 100644 --- a/tests/ParserLexerTests/ParserTests.cs +++ b/tests/ParserLexerTests/ParserTests.cs @@ -365,6 +365,22 @@ public void SelectFromVideoChunker() Assert.AreEqual(10, chunkSizeSeconds); } + [Test] + public void SelectFromVideoToImage() + { + string query = @"SELECT * FROM VIDEO_TO_IMAGE(1, 60, SELECT * FROM VIDEO_CHUNKER(10, SELECT * FROM T))"; + var selectStatement = GetSelectStatement(query); + + Assert.IsTrue(selectStatement.From.IsVideoImageProviderSubquery); + int framesPerDuration = ((Sql.sqlStatementOrId.VideoImageProviderSubquery)selectStatement.From).Item2; + int durationCapture = ((Sql.sqlStatementOrId.VideoImageProviderSubquery)selectStatement.From).Item3; + selectStatement = ((Sql.sqlStatementOrId.VideoImageProviderSubquery)selectStatement.From).Item1; + + Assert.IsTrue(selectStatement.From.IsVideoChunkProviderSubquery); + Assert.AreEqual(1, framesPerDuration); + Assert.AreEqual(60, durationCapture); + } + #region Helper private Sql.sqlStatement GetSelectStatement(string query) {