@@ -163,7 +163,7 @@ export class MetabaseController extends AppController<MetabaseAppState> {
163163 return { text : `Using ${ Object . keys ( template_tags || { } ) . length } template tags and ${ ( parameters || [ ] ) . length } parameters` , code : sql , oldCode : sqlQuery }
164164 }
165165 } )
166- async updateSQLQueryWithParams ( { sql, template_tags = { } , parameters = [ ] , executeImmediately = true , _type = "markdown" , ctes = [ ] } : { sql : string , template_tags ?: object , parameters ?: any [ ] , executeImmediately ?: boolean , _type ?: string , ctes : CTE [ ] } ) {
166+ async updateSQLQueryWithParams ( { sql, template_tags = { } , parameters = [ ] , parameterValues = [ ] , executeImmediately = true , _type = "markdown" , ctes = [ ] } : { sql : string , template_tags ?: object , parameters ?: any [ ] , parameterValues ?: Array < { id : string , value : string [ ] } > , executeImmediately ?: boolean , _type ?: string , ctes : CTE [ ] } ) {
167167 const actionContent : BlankMessageContent = {
168168 type : "BLANK" ,
169169 } ;
@@ -216,6 +216,13 @@ export class MetabaseController extends AppController<MetabaseAppState> {
216216 await RPCs . dispatchMetabaseAction ( 'metabase/qb/TOGGLE_TEMPLATE_TAGS_EDITOR' ) ;
217217 await RPCs . dispatchMetabaseAction ( 'metabase/qb/TOGGLE_TEMPLATE_TAGS_EDITOR' ) ;
218218
219+ // Set parameter values if provided
220+ if ( parameterValues && Array . isArray ( parameterValues ) && parameterValues . length > 0 ) {
221+ await Promise . all ( parameterValues . map ( async ( { id, value} ) => {
222+ return RPCs . dispatchMetabaseAction ( 'metabase/qb/SET_PARAMETER_VALUE' , { id, value } ) ;
223+ } ) ) ;
224+ }
225+
219226 if ( executeImmediately ) {
220227 return await this . _executeSQLQueryInternal ( _type ) ;
221228 } else {
@@ -371,7 +378,7 @@ export class MetabaseController extends AppController<MetabaseAppState> {
371378 labelRunning : "Setting parameter values for a query" ,
372379 labelDone : "Parameter values set" ,
373380 labelTask : "Parameter values set" ,
374- description : "Sets parameter values for a query in the Metabase SQL editor and execute." ,
381+ description : "Sets parameter values for a query in the Metabase SQL editor and execute. Use ExecuteQuery with parameterValues argument instead unless solely updating parameter values. " ,
375382 renderBody : ( { parameterValues } : { parameterValues : Array < { id : string , value : string [ ] } > } ) => {
376383 return { text : null , code : JSON . stringify ( { parameterValues } ) }
377384 }
@@ -388,14 +395,15 @@ export class MetabaseController extends AppController<MetabaseAppState> {
388395 labelDone : "Executed query" ,
389396 labelTask : "Kick off SQL query" ,
390397 description : "Executes the SQL query in the Metabase SQL editor with support for template tags and parameters." ,
391- renderBody : ( { sql, explanation, template_tags= { } , parameters= [ ] } : { sql : string , explanation : string , template_tags ?: object , parameters ?: any [ ] } , appState : MetabaseAppStateSQLEditor | MetabaseAppStateSQLEditorV2 ) => {
398+ renderBody : ( { sql, explanation, template_tags= { } , parameters= [ ] , parameterValues = [ ] } : { sql : string , explanation : string , template_tags ?: object , parameters ?: any [ ] , parameterValues ?: Array < { id : string , value : string [ ] } > } , appState : MetabaseAppStateSQLEditor | MetabaseAppStateSQLEditorV2 ) => {
392399 const currentQuery = appState ?. currentCard ?. dataset_query ?. native ?. query || appState ?. sqlQuery || "" ;
393400 const currentTemplateTags = appState ?. currentCard ?. dataset_query ?. native ?. [ 'template-tags' ] || { } ;
394401 const currentParameters = appState ?. currentCard ?. parameters || [ ] ;
395- return { text : explanation , code : sql , oldCode : currentQuery , language : "sql" , extraArgs : { old : { template_tags : currentTemplateTags , parameters : currentParameters } , new : { template_tags, parameters} } }
402+ const paramValuesInfo = parameterValues && parameterValues . length > 0 ? ` with ${ parameterValues . length } parameter values` : '' ;
403+ return { text : `${ explanation } ${ paramValuesInfo } ` , code : sql , oldCode : currentQuery , language : "sql" , extraArgs : { old : { template_tags : currentTemplateTags , parameters : currentParameters } , new : { template_tags, parameters, parameterValues} } }
396404 }
397405 } )
398- async ExecuteQuery ( { sql, _ctes = [ ] , explanation = "" , template_tags= { } , parameters= [ ] } : { sql : string , _ctes ?: CTE [ ] , explanation ?: string , template_tags ?: object , parameters ?: any [ ] } ) {
406+ async ExecuteQuery ( { sql, _ctes = [ ] , explanation = "" , template_tags= { } , parameters= [ ] , parameterValues = [ ] } : { sql : string , _ctes ?: CTE [ ] , explanation ?: string , template_tags ?: object , parameters ?: any [ ] , parameterValues ?: Array < { id : string , value : string [ ] } > } ) {
399407 // console.log('Template tags are', template_tags)
400408 // console.log('Parameters are', parameters)
401409 // Try parsing template_tags and parameters if they are strings
@@ -413,6 +421,13 @@ export class MetabaseController extends AppController<MetabaseAppState> {
413421 } catch ( error ) {
414422 console . error ( 'Error parsing parameters:' , error ) ;
415423 }
424+ try {
425+ if ( typeof parameterValues === 'string' ) {
426+ parameterValues = JSON . parse ( parameterValues ) ;
427+ }
428+ } catch ( error ) {
429+ console . error ( 'Error parsing parameterValues:' , error ) ;
430+ }
416431 const metabaseState = this . app as App < MetabaseAppState > ;
417432 const pageType = metabaseState . useStore ( ) . getState ( ) . toolContext ?. pageType ;
418433
@@ -421,7 +436,7 @@ export class MetabaseController extends AppController<MetabaseAppState> {
421436
422437 if ( pageType === 'sql' ) {
423438 // if (hasTemplateTagsOrParams) {
424- return await this . updateSQLQueryWithParams ( { sql, template_tags, parameters, executeImmediately : true , _type : "csv" , ctes : _ctes } ) ;
439+ return await this . updateSQLQueryWithParams ( { sql, template_tags, parameters, parameterValues , executeImmediately : true , _type : "csv" , ctes : _ctes } ) ;
425440 // } else {
426441 // return await this.updateSQLQuery({ sql, executeImmediately: true, _type: "csv", ctes: _ctes });
427442 // }
0 commit comments