@@ -333,9 +333,12 @@ class Parameter(Term):
333
333
is_aggregate = None
334
334
335
335
def __init__ (self , placeholder : str | None = None , idx : int | None = None ) -> None :
336
- if not placeholder and not idx :
336
+ if not placeholder and idx is None :
337
337
raise ValueError ("Must provide either a placeholder or an idx" )
338
338
339
+ if idx is not None and idx < 1 :
340
+ raise ValueError ("idx must start at 1" )
341
+
339
342
if placeholder and idx :
340
343
raise ValueError ("Cannot provide both a placeholder and an idx" )
341
344
@@ -403,9 +406,23 @@ def get_sql(self, **kwargs: Any) -> str:
403
406
class ValueWrapper (Term ):
404
407
is_aggregate = None
405
408
406
- def __init__ (self , value : Any , alias : str | None = None ) -> None :
409
+ def __init__ (
410
+ self , value : Any , alias : str | None = None , allow_parametrize : bool = True
411
+ ) -> None :
412
+ """
413
+ A wrapper for a constant value such as a string or number.
414
+
415
+ :param value:
416
+ The value to be wrapped.
417
+ :param alias:
418
+ An optional alias for the value.
419
+ :param allow_parametrize:
420
+ Whether the value should be replaced with a parameter in the query if parameterizer
421
+ is used.
422
+ """
407
423
super ().__init__ (alias )
408
424
self .value = value
425
+ self .allow_parametrize = allow_parametrize
409
426
410
427
def get_value_sql (self , ** kwargs : Any ) -> str :
411
428
return self .get_formatted_value (self .value , ** kwargs )
@@ -443,7 +460,11 @@ def get_sql(
443
460
parameterizer : Parameterizer | None = None ,
444
461
** kwargs : Any ,
445
462
) -> str :
446
- if parameterizer is None or not parameterizer .should_parameterize (self .value ):
463
+ if (
464
+ parameterizer is None
465
+ or not parameterizer .should_parameterize (self .value )
466
+ or not self .allow_parametrize
467
+ ):
447
468
sql = self .get_value_sql (
448
469
quote_char = quote_char , secondary_quote_char = secondary_quote_char , ** kwargs
449
470
)
0 commit comments