@@ -8,7 +8,6 @@ use anyhow::anyhow;
88use arrow:: { array:: RecordBatch , datatypes:: Schema } ;
99use futures03:: future:: try_join_all;
1010use itertools:: Itertools ;
11- use lazy_regex:: regex_is_match;
1211use semver:: Version ;
1312use serde:: Deserialize ;
1413use slog:: { debug, Logger } ;
@@ -22,7 +21,9 @@ use crate::{
2221 auto_block_hash_decoder, auto_block_number_decoder, auto_block_timestamp_decoder,
2322 } ,
2423 error:: IsDeterministic ,
25- sql:: { BlockRangeQueryBuilder , ContextQuery , ValidQuery } ,
24+ sql:: {
25+ normalize_sql_ident, validate_ident, BlockRangeQueryBuilder , ContextQuery , ValidQuery ,
26+ } ,
2627 } ,
2728 components:: link_resolver:: { LinkResolver , LinkResolverContext } ,
2829 data:: subgraph:: DeploymentHash ,
@@ -80,7 +81,8 @@ impl RawDataSource {
8081 let logger = logger. new ( slog:: o!( "data_source" => name. clone( ) ) ) ;
8182 debug ! ( logger, "Resolving data source" ) ;
8283
83- validate_ident ( & name) . map_err ( |e| e. source_context ( "invalid `name`" ) ) ?;
84+ validate_ident ( & name)
85+ . map_err ( |e| Error :: InvalidValue ( e) . source_context ( "invalid `name`" ) ) ?;
8486 Self :: validate_kind ( kind) ?;
8587
8688 let source = source
@@ -380,7 +382,8 @@ impl RawAbi {
380382 ) -> Result < Abi , Error > {
381383 let Self { name, file } = self ;
382384
383- validate_ident ( & name) . map_err ( |e| e. source_context ( "invalid `name`" ) ) ?;
385+ validate_ident ( & name)
386+ . map_err ( |e| Error :: InvalidValue ( e) . source_context ( "invalid `name`" ) ) ?;
384387 let contract = Self :: resolve_contract ( logger, link_resolver, file) . await ?;
385388
386389 Ok ( Abi { name, contract } )
@@ -448,7 +451,8 @@ impl RawTable {
448451 ) -> Result < Table , Error > {
449452 let Self { name, query, file } = self ;
450453
451- validate_ident ( & name) . map_err ( |e| e. source_context ( "invalid `name`" ) ) ?;
454+ validate_ident ( & name)
455+ . map_err ( |e| Error :: InvalidValue ( e) . source_context ( "invalid `name`" ) ) ?;
452456 let query = match Self :: resolve_query ( query, source, abis) ? {
453457 Some ( query) => query,
454458 None => Self :: resolve_file ( logger, link_resolver, file, source, abis) . await ?,
@@ -459,7 +463,7 @@ impl RawTable {
459463
460464 for field in schema. fields ( ) {
461465 validate_ident ( field. name ( ) ) . map_err ( |e| {
462- e . source_context ( format ! (
466+ Error :: InvalidValue ( e ) . source_context ( format ! (
463467 "invalid query output schema: invalid column '{}'" ,
464468 field. name( )
465469 ) )
@@ -685,22 +689,6 @@ impl IsDeterministic for Error {
685689 }
686690}
687691
688- fn validate_ident ( s : & str ) -> Result < ( ) , Error > {
689- if !regex_is_match ! ( "^[a-zA-Z_][a-zA-Z0-9_-]{0,100}$" , s) {
690- return Err ( Error :: InvalidValue (
691- anyhow ! ( "invalid identifier '{s}': must start with a letter or an underscore, and contain only letters, numbers, hyphens, and underscores" )
692- ) ) ;
693- }
694- Ok ( ( ) )
695- }
696-
697- fn normalize_sql_ident ( s : & str ) -> String {
698- match validate_ident ( s) {
699- Ok ( ( ) ) => s. to_lowercase ( ) ,
700- Err ( _e) => sqlparser_latest:: ast:: Ident :: with_quote ( '"' , s) . to_string ( ) ,
701- }
702- }
703-
704692#[ cfg( test) ]
705693mod tests {
706694 use super :: * ;
0 commit comments