@@ -849,6 +849,47 @@ describe("fail-closed query-site behavior", () => {
849849 ) . toBe ( "unavailable" ) ;
850850 } ) ;
851851
852+ it ( "enforces the bare identifier ceiling before dialect code for every role" , ( ) => {
853+ const maximumIdentifier = "x" . repeat (
854+ MAX_QUERY_SITE_IDENTIFIER_LENGTH ,
855+ ) ;
856+ const oversizedIdentifier = "x" . repeat (
857+ MAX_QUERY_SITE_IDENTIFIER_LENGTH + 1 ,
858+ ) ;
859+ const roles : (
860+ | "explicit-alias"
861+ | "implicit-alias"
862+ | "using-column"
863+ ) [ ] = [ ] ;
864+ const dialect : SqlQuerySiteDialect = {
865+ ...postgresDialect ,
866+ classifyIdentifierToken : ( _rawIdentifier , _quoted , role ) => {
867+ roles . push ( role ) ;
868+ return { status : "identifier" , value : "decoded" } ;
869+ } ,
870+ } ;
871+ for ( const marked of [
872+ `SELECT * FROM users ${ maximumIdentifier } JOIN |` ,
873+ `SELECT * FROM users AS ${ maximumIdentifier } JOIN |` ,
874+ `SELECT * FROM a JOIN b USING(${ maximumIdentifier } ) JOIN |` ,
875+ ] ) {
876+ expect ( recognize ( marked , { dialect } ) . status ) . toBe ( "ready" ) ;
877+ }
878+ expect ( roles ) . toEqual ( [
879+ "implicit-alias" ,
880+ "explicit-alias" ,
881+ "using-column" ,
882+ ] ) ;
883+ for ( const marked of [
884+ `SELECT * FROM users ${ oversizedIdentifier } JOIN |` ,
885+ `SELECT * FROM users AS ${ oversizedIdentifier } JOIN |` ,
886+ `SELECT * FROM a JOIN b USING(${ oversizedIdentifier } ) JOIN |` ,
887+ ] ) {
888+ expect ( recognize ( marked , { dialect } ) . status ) . toBe ( "unavailable" ) ;
889+ }
890+ expect ( roles ) . toHaveLength ( 3 ) ;
891+ } ) ;
892+
852893 it . each ( [
853894 'SELECT * FROM users "" JOIN |' ,
854895 'SELECT * FROM users AS "" JOIN |' ,
0 commit comments