88import { BucketParameterQuerier , ParameterLookup , ParameterLookupSource } from './BucketParameterQuerier.js' ;
99import { SqlRuleError } from './errors.js' ;
1010import { SourceTableInterface } from './SourceTableInterface.js' ;
11- import { SqlTools } from './sql_filters.js' ;
11+ import { AvailableTable , SqlTools } from './sql_filters.js' ;
1212import { checkUnsupportedFeatures , isClauseError , isParameterValueClause } from './sql_support.js' ;
1313import { StaticSqlParameterQuery } from './StaticSqlParameterQuery.js' ;
1414import { TablePattern } from './TablePattern.js' ;
@@ -33,7 +33,7 @@ import { filterJsonRow, getBucketId, isJsonValue, isSelectStatement, normalizePa
3333
3434export interface SqlParameterQueryOptions {
3535 sourceTable : TablePattern ;
36- table : string ;
36+ table : AvailableTable ;
3737 sql : string ;
3838 lookupExtractors : Record < string , RowValueClause > ;
3939 parameterExtractors : Record < string , ParameterValueClause > ;
@@ -95,8 +95,8 @@ export class SqlParameterQuery {
9595 if ( tableRef ?. name == null ) {
9696 throw new SqlRuleError ( 'Must SELECT from a single table' , sql , q . from ?. [ 0 ] . _location ) ;
9797 }
98- const alias : string = q . from ?. [ 0 ] . name . alias ?? tableRef . name ;
99- if ( tableRef . name != alias ) {
98+ const alias = new AvailableTable ( tableRef . name , q . from ?. [ 0 ] . name . alias ) ;
99+ if ( alias . isAliased ) {
100100 errors . push ( new SqlRuleError ( 'Table aliases not supported in parameter queries' , sql , q . from ?. [ 0 ] . _location ) ) ;
101101 }
102102 const sourceTable = new TablePattern ( tableRef . schema ?? options . defaultSchema , tableRef . name ) ;
@@ -119,7 +119,7 @@ export class SqlParameterQuery {
119119
120120 const tools = new SqlTools ( {
121121 table : alias ,
122- parameterTables : [ 'token_parameters' , 'user_parameters' ] ,
122+ parameterTables : [ new AvailableTable ( 'token_parameters' ) , new AvailableTable ( 'user_parameters' ) ] ,
123123 sql,
124124 supportsExpandingParameters : true ,
125125 supportsParameterExpressions : true ,
@@ -212,9 +212,10 @@ export class SqlParameterQuery {
212212 * The table name or alias, as referred to in the SQL query.
213213 * Not used directly outside the query.
214214 *
215- * Currently, this always matches sourceTable.name.
215+ * Since aliases aren't allowed in parameter queries, this always matches sourceTable.name (checked by
216+ * {@link fromSql}).
216217 */
217- readonly table : string ;
218+ readonly table : AvailableTable ;
218219
219220 /**
220221 * The source SQL query, for debugging purposes.
@@ -308,7 +309,7 @@ export class SqlParameterQuery {
308309 */
309310 evaluateParameterRow ( row : SqliteRow ) : EvaluatedParametersResult [ ] {
310311 const tables = {
311- [ this . table ] : row
312+ [ this . table . nameInSchema ] : row
312313 } ;
313314 try {
314315 const filterParameters = this . filter . filterRow ( tables ) ;
@@ -336,7 +337,7 @@ export class SqlParameterQuery {
336337 }
337338
338339 private transformRows ( row : SqliteRow ) : SqliteRow [ ] {
339- const tables = { [ this . table ] : row } ;
340+ const tables = { [ this . table . sqlName ] : row } ;
340341 let result : SqliteRow = { } ;
341342 for ( let key in this . lookupExtractors ) {
342343 const extractor = this . lookupExtractors [ key ] ;
0 commit comments