Class: ADBC::Statement
- Inherits:
-
Object
- Object
- ADBC::Statement
- Defined in:
- lib/adbc/statement.rb
Class Method Summary collapse
Instance Method Summary collapse
- #bind(*args) ⇒ Object
- #bind_raw ⇒ Object
- #execute(need_result: true) ⇒ Object
- #execute_raw ⇒ Object
- #ingest(table_name, values, mode: :create) ⇒ Object
- #query(sql, &block) ⇒ Object
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? = "wrong number of arguments (given #{n_args}, expected 1 with block)" raise ArgumentError, 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_raw ⇒ Object
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_raw ⇒ Object
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 |