Skip to content

Commit d7a1c79

Browse files
committed
fixes
1 parent 5b57226 commit d7a1c79

3 files changed

Lines changed: 50 additions & 35 deletions

File tree

meta/src/meta/templates/parser.jl.template

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -190,11 +190,11 @@ mutable struct ParserState
190190
id_to_debuginfo::Dict{{Vector{{UInt8}},Vector{{Pair{{Tuple{{UInt64,UInt64}},String}}}}}}
191191
_current_fragment_id::Union{{Nothing,Vector{{UInt8}}}}
192192
_relation_id_to_name::Dict{{Tuple{{UInt64,UInt64}},String}}
193-
provenance::Dict{{Int,Span}}
193+
provenance::Dict{{Any,Span}}
194194
_line_starts::Vector{{Int}}
195195

196196
function ParserState(tokens::Vector{{Token}}, input_str::String)
197-
return new(tokens, 1, Dict(), nothing, Dict(), Dict(), _compute_line_starts(input_str))
197+
return new(tokens, 1, Dict(), nothing, Dict(), Dict{{Any,Span}}(), _compute_line_starts(input_str))
198198
end
199199
end
200200

@@ -329,36 +329,43 @@ end
329329
# --- Parse functions ---
330330
{parse_nonterminal_defns}
331331

332-
function parse_transaction(input::String)
333-
lexer = Lexer(input)
334-
parser = ParserState(lexer.tokens, input)
335-
result = parse_{start_name}(parser)
336-
# Check for unconsumed tokens (except EOF)
332+
function _check_eof(parser::ParserState)
337333
if parser.pos <= length(parser.tokens)
338334
remaining_token = lookahead(parser, 0)
339335
if remaining_token.type != "\$"
340336
throw(ParseError("Unexpected token at end of input: $remaining_token"))
341337
end
342338
end
343-
return result, parser.provenance
339+
return nothing
340+
end
341+
342+
function parse_transaction(input::String)
343+
lexer = Lexer(input)
344+
parser = ParserState(lexer.tokens, input)
345+
result = parse_{start_name}(parser)
346+
_check_eof(parser)
347+
return result
344348
end
345349

346350
function parse_fragment(input::String)
347351
lexer = Lexer(input)
348352
parser = ParserState(lexer.tokens, input)
349353
result = parse_fragment(parser)
350-
# Check for unconsumed tokens (except EOF)
351-
if parser.pos <= length(parser.tokens)
352-
remaining_token = lookahead(parser, 0)
353-
if remaining_token.type != "\$"
354-
throw(ParseError("Unexpected token at end of input: $remaining_token"))
355-
end
356-
end
357-
return result, parser.provenance
354+
_check_eof(parser)
355+
return result
358356
end
359357

360358
function parse(input::String)
361-
return parse_transaction(input)
359+
lexer = Lexer(input)
360+
parser = ParserState(lexer.tokens, input)
361+
result = parse_{start_name}(parser)
362+
_check_eof(parser)
363+
# Add root span at () key
364+
root_offset = lexer.tokens[1].start_pos
365+
if haskey(parser.provenance, root_offset)
366+
parser.provenance[()] = parser.provenance[root_offset]
367+
end
368+
return result, parser.provenance
362369
end
363370

364371
# Export main parse functions and error type

sdks/julia/LogicalQueryProtocol.jl/src/parser.jl

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -216,11 +216,11 @@ mutable struct ParserState
216216
id_to_debuginfo::Dict{Vector{UInt8},Vector{Pair{Tuple{UInt64,UInt64},String}}}
217217
_current_fragment_id::Union{Nothing,Vector{UInt8}}
218218
_relation_id_to_name::Dict{Tuple{UInt64,UInt64},String}
219-
provenance::Dict{Int,Span}
219+
provenance::Dict{Any,Span}
220220
_line_starts::Vector{Int}
221221

222222
function ParserState(tokens::Vector{Token}, input_str::String)
223-
return new(tokens, 1, Dict(), nothing, Dict(), Dict(), _compute_line_starts(input_str))
223+
return new(tokens, 1, Dict(), nothing, Dict(), Dict{Any,Span}(), _compute_line_starts(input_str))
224224
end
225225
end
226226

@@ -3676,36 +3676,43 @@ function parse_export_csv_columns_list(parser::ParserState)::Vector{Proto.Export
36763676
end
36773677

36783678

3679-
function parse_transaction(input::String)
3680-
lexer = Lexer(input)
3681-
parser = ParserState(lexer.tokens, input)
3682-
result = parse_transaction(parser)
3683-
# Check for unconsumed tokens (except EOF)
3679+
function _check_eof(parser::ParserState)
36843680
if parser.pos <= length(parser.tokens)
36853681
remaining_token = lookahead(parser, 0)
36863682
if remaining_token.type != "\$"
36873683
throw(ParseError("Unexpected token at end of input: $remaining_token"))
36883684
end
36893685
end
3690-
return result, parser.provenance
3686+
return nothing
3687+
end
3688+
3689+
function parse_transaction(input::String)
3690+
lexer = Lexer(input)
3691+
parser = ParserState(lexer.tokens, input)
3692+
result = parse_transaction(parser)
3693+
_check_eof(parser)
3694+
return result
36913695
end
36923696

36933697
function parse_fragment(input::String)
36943698
lexer = Lexer(input)
36953699
parser = ParserState(lexer.tokens, input)
36963700
result = parse_fragment(parser)
3697-
# Check for unconsumed tokens (except EOF)
3698-
if parser.pos <= length(parser.tokens)
3699-
remaining_token = lookahead(parser, 0)
3700-
if remaining_token.type != "\$"
3701-
throw(ParseError("Unexpected token at end of input: $remaining_token"))
3702-
end
3703-
end
3704-
return result, parser.provenance
3701+
_check_eof(parser)
3702+
return result
37053703
end
37063704

37073705
function parse(input::String)
3708-
return parse_transaction(input)
3706+
lexer = Lexer(input)
3707+
parser = ParserState(lexer.tokens, input)
3708+
result = parse_transaction(parser)
3709+
_check_eof(parser)
3710+
# Add root span at () key
3711+
root_offset = lexer.tokens[1].start_pos
3712+
if haskey(parser.provenance, root_offset)
3713+
parser.provenance[()] = parser.provenance[root_offset]
3714+
end
3715+
return result, parser.provenance
37093716
end
37103717

37113718
# Export main parse functions and error type

sdks/julia/LogicalQueryProtocol.jl/test/parser_tests.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,8 @@ end
127127

128128
@testitem "parse delegates to parse_transaction" setup=[ParserSetup] begin
129129
input = "(transaction (epoch (writes) (reads)))"
130-
@test Parser.parse(input) == Parser.parse_transaction(input)
130+
result, _ = Parser.parse(input)
131+
@test result == Parser.parse_transaction(input)
131132
end
132133

133134
@testitem "parse_fragment rejects transaction" setup=[ParserSetup] begin

0 commit comments

Comments
 (0)