Class: ADBC::Statement

Inherits:
Object
  • Object
show all
Defined in:
lib/adbc/statement.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.open(connection) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/adbc/statement.rb', line 21

def open(connection)
  statement = new(connection)
  if block_given?
    begin
      yield(statement)
    ensure
      statement.release
    end
  else
    statement
  end
end

Instance Method Details

#bind(*args) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/adbc/statement.rb', line 63

def bind(*args)
  n_args = args.size
  if block_given?
    message = "wrong number of arguments (given #{n_args}, expected 1 with block)"
    raise ArgumentError, message unless n_args == 1
    values = args[0]
    if values.is_a?(Arrow::Table)
      values = Arrow::TableBatchReader.new(values)
    end
    if values.is_a?(Arrow::RecordBatchReader)
      c_abi_array_stream = values.export
      begin
        bind_stream(c_abi_array_stream)
        yield
      ensure
        GLib.free(c_abi_array_stream)
      end
    else
      _, c_abi_array, c_abi_schema = values.export
      begin
        bind_raw(c_abi_array, c_abi_schema)
        yield
      ensure
        begin
          GLib.free(c_abi_array)
        ensure
          GLib.free(c_abi_schema)
        end
      end
    end
  else
    bind_raw(*args)
  end
end

#bind_rawObject



62
# File 'lib/adbc/statement.rb', line 62

alias_method :bind_raw, :bind

#execute(need_result: true) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/adbc/statement.rb', line 36

def execute(need_result: true)
  _, c_abi_array_stream, n_rows_affected = execute_raw(need_result)
  if need_result
    begin
      reader = Arrow::RecordBatchReader.import(c_abi_array_stream)
      begin
        if block_given?
          yield(reader, n_rows_affected)
        else
          [reader.read_all, n_rows_affected]
        end
      ensure
        reader.unref
      end
    ensure
      GLib.free(c_abi_array_stream)
    end
  else
    if block_given?
      yield(n_rows_affected)
    else
      n_rows_affected
    end
  end
end

#execute_rawObject



35
# File 'lib/adbc/statement.rb', line 35

alias_method :execute_raw, :execute

#ingest(table_name, values, mode: :create) ⇒ Object



98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/adbc/statement.rb', line 98

def ingest(table_name, values, mode: :create)
  insert = "INSERT INTO #{table_name} (" # TODO escape
  fields = values.schema.fields
  insert << fields.collect(&:name).join(", ")
  insert << ") VALUES ("
  insert << (["?"] * fields.size).join(", ")
  insert << ")"
  self.sql_query = insert
  self.ingest_target_table = table_name
  self.ingest_mode = mode
  bind(values) do
    execute(need_result: false)
  end
end

#query(sql, &block) ⇒ Object



113
114
115
116
# File 'lib/adbc/statement.rb', line 113

def query(sql, &block)
  self.sql_query = sql
  execute(&block)
end