@@ -20,62 +20,23 @@ static TS_QUERY: LazyLock<tree_sitter::Query> = LazyLock::new(|| {
2020
2121#[ derive( Debug ) ]
2222pub struct ParameterMatch < ' a > {
23- pub ( crate ) root : Option < tree_sitter:: Node < ' a > > ,
24- pub ( crate ) path : Option < tree_sitter:: Node < ' a > > ,
25-
26- pub ( crate ) field : tree_sitter:: Node < ' a > ,
27- }
28-
29- #[ derive( Debug , PartialEq ) ]
30- pub enum Field {
31- Text ( String ) ,
32- Parameter ( usize ) ,
23+ pub ( crate ) node : tree_sitter:: Node < ' a > ,
3324}
3425
3526impl ParameterMatch < ' _ > {
36- pub fn get_root ( & self , sql : & str ) -> Option < String > {
37- let str = self
38- . root
39- . as_ref ( ) ?
40- . utf8_text ( sql. as_bytes ( ) )
41- . expect ( "Failed to get schema from RelationMatch" ) ;
42-
43- Some ( str. to_string ( ) )
44- }
45-
46- pub fn get_path ( & self , sql : & str ) -> Option < String > {
47- let str = self
48- . path
49- . as_ref ( ) ?
27+ pub fn get_path ( & self , sql : & str ) -> String {
28+ self . node
5029 . utf8_text ( sql. as_bytes ( ) )
51- . expect ( "Failed to get table from RelationMatch" ) ;
52-
53- Some ( str. to_string ( ) )
54- }
55-
56- pub fn get_field ( & self , sql : & str ) -> Field {
57- let text = self
58- . field
59- . utf8_text ( sql. as_bytes ( ) )
60- . expect ( "Failed to get field from RelationMatch" ) ;
61-
62- if let Some ( stripped) = text. strip_prefix ( '$' ) {
63- return Field :: Parameter (
64- stripped
65- . parse :: < usize > ( )
66- . expect ( "Failed to parse parameter" ) ,
67- ) ;
68- }
69-
70- Field :: Text ( text. to_string ( ) )
30+ . expect ( "Failed to get path from ParameterMatch" )
31+ . to_string ( )
7132 }
7233
7334 pub fn get_range ( & self ) -> tree_sitter:: Range {
74- self . field . range ( )
35+ self . node . range ( )
7536 }
7637
7738 pub fn get_byte_range ( & self ) -> std:: ops:: Range < usize > {
78- let range = self . field . range ( ) ;
39+ let range = self . node . range ( ) ;
7940 range. start_byte ..range. end_byte
8041 }
8142}
@@ -112,37 +73,9 @@ impl<'a> Query<'a> for ParameterMatch<'a> {
11273 return None ;
11374 }
11475
115- let field = captures[ 0 ] . node ;
116- let text = match field. utf8_text ( stmt. as_bytes ( ) ) {
117- Ok ( t) => t,
118- Err ( _) => return None ,
119- } ;
120- let parts: Vec < & str > = text. split ( '.' ) . collect ( ) ;
121-
122- let param_match = match parts. len ( ) {
123- // Simple field: field_name
124- 1 => ParameterMatch {
125- root : None ,
126- path : None ,
127- field,
128- } ,
129- // Table qualified: table.field_name
130- 2 => ParameterMatch {
131- root : None ,
132- path : field. named_child ( 0 ) ,
133- field : field. named_child ( 1 ) ?,
134- } ,
135- // Fully qualified: schema.table.field_name
136- 3 => ParameterMatch {
137- root : field. named_child ( 0 ) . and_then ( |n| n. named_child ( 0 ) ) ,
138- path : field. named_child ( 0 ) . and_then ( |n| n. named_child ( 1 ) ) ,
139- field : field. named_child ( 1 ) ?,
140- } ,
141- // Unexpected number of parts
142- _ => return None ,
143- } ;
144-
145- Some ( QueryResult :: Parameter ( param_match) )
76+ Some ( QueryResult :: Parameter ( ParameterMatch {
77+ node : captures[ 0 ] . node ,
78+ } ) )
14679 } )
14780 . collect ( )
14881 }
0 commit comments