Module: Sequel::Postgres::AutoParameterize::DatasetMethods
- Defined in:
- lib/sequel/extensions/pg_auto_parameterize.rb
Instance Method Summary collapse
- 
  
    
      #cast_sql_append(sql, expr, type)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Do not add implicit typecasts for directly typecasted values, since the user is presumably doing so to set the type, not convert from the implicitly typecasted type. 
- 
  
    
      #complex_expression_sql_append(sql, op, args)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Transform column IN (int, …) expressions into column = ANY($) and column NOT IN (int, …) expressions into column != ALL($) using an integer array bound variable for the ANY/ALL argument. 
- 
  
    
      #literal_append(sql, v)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    For strings, numeric arguments, and date/time arguments, add them as parameters to the query instead of literalizing them into the SQL. 
- 
  
    
      #multi_insert_sql(columns, values)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Parameterize insertion of multiple values. 
- 
  
    
      #no_auto_parameterize  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Return a clone of the dataset that will not do automatic parameterization. 
- 
  
    
      #placeholder_literalizer_class  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    The class to use for placeholder literalizers. 
- 
  
    
      #use_cursor  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Disable automatic parameterization when using a cursor. 
- 
  
    
      #with_sql(*a)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Store receiving dataset and args when with_sql is used with a method name symbol, so sql can be parameterized correctly if used as a subselect. 
Instance Method Details
#cast_sql_append(sql, expr, type) ⇒ Object
Do not add implicit typecasts for directly typecasted values, since the user is presumably doing so to set the type, not convert from the implicitly typecasted type.
| 258 259 260 261 262 263 264 265 266 | # File 'lib/sequel/extensions/pg_auto_parameterize.rb', line 258 def cast_sql_append(sql, expr, type) if auto_param?(sql) && auto_param_type(expr) sql << 'CAST(' sql.add_arg(expr) sql << ' AS ' << db.cast_type_literal(type).to_s << ')' else super end end | 
#complex_expression_sql_append(sql, op, args) ⇒ Object
Transform column IN (int, …) expressions into column = ANY($) and column NOT IN (int, …) expressions into column != ALL($) using an integer array bound variable for the ANY/ALL argument. This is the same optimization PostgreSQL performs internally, but this reduces the number of bound variables.
| 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 | # File 'lib/sequel/extensions/pg_auto_parameterize.rb', line 273 def complex_expression_sql_append(sql, op, args) case op when :IN, :"NOT IN" l, r = args if auto_param?(sql) && !l.is_a?(Array) && _integer_array?(r) && r.size > 1 if op == :IN op = :"=" func = :ANY else op = :!= func = :ALL end args = [l, Sequel.function(func, Sequel.cast(_integer_array_auto_param(r), 'int8[]'))] end end super end | 
#literal_append(sql, v) ⇒ Object
For strings, numeric arguments, and date/time arguments, add them as parameters to the query instead of literalizing them into the SQL.
| 304 305 306 307 308 309 310 | # File 'lib/sequel/extensions/pg_auto_parameterize.rb', line 304 def literal_append(sql, v) if auto_param?(sql) && (type = auto_param_type(v)) sql.add_arg(v) << type else super end end | 
#multi_insert_sql(columns, values) ⇒ Object
Parameterize insertion of multiple values
| 293 294 295 296 297 298 299 | # File 'lib/sequel/extensions/pg_auto_parameterize.rb', line 293 def multi_insert_sql(columns, values) if @opts[:no_auto_parameterize] super else [clone(:multi_insert_values=>values.map{|r| Array(r)}).insert_sql(columns, LiteralString.new('VALUES '))] end end | 
#no_auto_parameterize ⇒ Object
Return a clone of the dataset that will not do automatic parameterization.
| 249 250 251 252 253 | # File 'lib/sequel/extensions/pg_auto_parameterize.rb', line 249 def no_auto_parameterize cached_dataset(:_no_auto_parameterize_ds) do @opts[:no_auto_parameterize] ? self : clone(:no_auto_parameterize=>true) end end | 
#placeholder_literalizer_class ⇒ Object
The class to use for placeholder literalizers.
| 313 314 315 316 317 318 319 | # File 'lib/sequel/extensions/pg_auto_parameterize.rb', line 313 def placeholder_literalizer_class if @opts[:no_auto_parameterize] super else PlaceholderLiteralizer end end | 
#use_cursor ⇒ Object
Disable automatic parameterization when using a cursor.
| 322 323 324 | # File 'lib/sequel/extensions/pg_auto_parameterize.rb', line 322 def use_cursor(*) super.no_auto_parameterize end | 
#with_sql(*a) ⇒ Object
Store receiving dataset and args when with_sql is used with a method name symbol, so sql can be parameterized correctly if used as a subselect.
| 328 329 330 331 332 333 334 | # File 'lib/sequel/extensions/pg_auto_parameterize.rb', line 328 def with_sql(*a) ds = super if Symbol === a[0] ds = ds.clone(:with_sql_dataset=>self, :with_sql_args=>a.freeze) end ds end |