Module: ChDB::SQLProcessor

Included in:
Statement
Defined in:
lib/chdb/sql_processor.rb

Overview

This module provides functionality for processing SQL queries, including binding variables and escaping values.

Instance Method Summary collapse

Instance Method Details

#escape(value) ⇒ Object



20
21
22
23
24
25
26
27
28
# File 'lib/chdb/sql_processor.rb', line 20

def escape(value)
  case value
  when String then "'#{value.gsub("'", "''")}'"
  when NilClass then 'NULL'
  when TrueClass then '1'
  when FalseClass then '0'
  else value.to_s
  end
end

#process_sqlObject



9
10
11
12
13
14
15
16
17
18
# File 'lib/chdb/sql_processor.rb', line 9

def process_sql
  placeholders = @sql.scan(/(?<!\\)\?/).size
  if placeholders != @bind_vars.size
    raise ChDB::SQLException, "Wrong number of bind variables (#{@bind_vars.size} for #{placeholders})"
  end

  escaped_values = @bind_vars.map { |v| escape(v) }
  sql = @sql.dup
  sql.gsub(/(?<!\\)\?/) { escaped_values.shift or '?' }
end