Skip to content

Commit 3e1757e

Browse files
authored
Merge pull request suketa#841 from suketa/begin_row_does_nothing
DuckDB::Appender#begin_row returns self only
2 parents eb83885 + b5acd31 commit 3e1757e

File tree

6 files changed

+15
-53
lines changed

6 files changed

+15
-53
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ All notable changes to this project will be documented in this file.
44
# Unreleased
55
- add 'DuckDB::Appender#error_message'.
66
- fix error message when DuckDB::Appender#flush failed.
7+
- 'DuckDB::Appender#begin_row' does nothing. Only returns self. 'DuckDB::Appender#end_row' is only required.
78

89
# 1.1.3.1 - 2024-11-27
910
- fix to `DuckDB::Connection#query` with multiple SQL statements. Calling PreparedStatement#destroy after each statement executed.

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,6 @@ def append
218218
appender = con.appender('users')
219219
220220
10000.times do
221-
appender.begin_row
222221
appender.append(1)
223222
appender.append('Alice')
224223
appender.end_row

ext/duckdb/appender.c

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ static VALUE allocate(VALUE klass);
77
static size_t memsize(const void *p);
88
static VALUE appender_initialize(VALUE klass, VALUE con, VALUE schema, VALUE table);
99
static VALUE appender_error_message(VALUE self);
10-
static VALUE appender_begin_row(VALUE self);
1110
static VALUE appender_end_row(VALUE self);
1211
static VALUE appender_append_bool(VALUE self, VALUE val);
1312
static VALUE appender_append_int8(VALUE self, VALUE val);
@@ -107,33 +106,6 @@ static VALUE appender_error_message(VALUE self) {
107106
return rb_str_new2(msg);
108107
}
109108

110-
/* call-seq:
111-
* appender.begin_row -> self
112-
*
113-
* Begins a new row in the appender. This must be called before appending any values to the row.
114-
*
115-
* require 'duckdb'
116-
* db = DuckDB::Database.open
117-
* con = db.connect
118-
* con.query('CREATE TABLE users (id INTEGER, name VARCHAR)')
119-
* appender = con.appender('users')
120-
* appender
121-
* .begin_row
122-
* .append_int32(1)
123-
* .append_varchar('Alice')
124-
* .end_row
125-
* .flush
126-
*/
127-
static VALUE appender_begin_row(VALUE self) {
128-
rubyDuckDBAppender *ctx;
129-
TypedData_Get_Struct(self, rubyDuckDBAppender, &appender_data_type, ctx);
130-
131-
if (duckdb_appender_begin_row(ctx->appender) == DuckDBError) {
132-
rb_raise(eDuckDBError, "failed to begin row");
133-
}
134-
return self;
135-
}
136-
137109
/* call-seq:
138110
* appender.end_row -> self
139111
*
@@ -145,7 +117,6 @@ static VALUE appender_begin_row(VALUE self) {
145117
* con.query('CREATE TABLE users (id INTEGER, name VARCHAR)')
146118
* appender = con.appender('users')
147119
* appender
148-
* .begin_row
149120
* .append_int32(1)
150121
* .append_varchar('Alice')
151122
* .end_row
@@ -172,7 +143,6 @@ static VALUE appender_end_row(VALUE self) {
172143
* con.query('CREATE TABLE users (id INTEGER, active BOOLEAN)')
173144
* appender = con.appender('users')
174145
* appender
175-
* .begin_row
176146
* .append_int32(1)
177147
* .append_bool(true)
178148
* .end_row
@@ -203,7 +173,6 @@ static VALUE appender_append_bool(VALUE self, VALUE val) {
203173
* con.query('CREATE TABLE users (id INTEGER, age TINYINT)')
204174
* appender = con.appender('users')
205175
* appender
206-
* .begin_row
207176
* .append_int32(1)
208177
* .append_int8(20)
209178
* .end_row
@@ -232,7 +201,6 @@ static VALUE appender_append_int8(VALUE self, VALUE val) {
232201
* con.query('CREATE TABLE users (id INTEGER, age SMALLINT)')
233202
* appender = con.appender('users')
234203
* appender
235-
* .begin_row
236204
* .append_int32(1)
237205
* .append_int16(20)
238206
* .end_row
@@ -261,7 +229,6 @@ static VALUE appender_append_int16(VALUE self, VALUE val) {
261229
* con.query('CREATE TABLE users (id INTEGER, age INTEGER)')
262230
* appender = con.appender('users')
263231
* appender
264-
* .begin_row
265232
* .append_int32(1)
266233
* .append_int32(20)
267234
* .end_row
@@ -290,7 +257,6 @@ static VALUE appender_append_int32(VALUE self, VALUE val) {
290257
* con.query('CREATE TABLE users (id INTEGER, age BIGINT)')
291258
* appender = con.appender('users')
292259
* appender
293-
* .begin_row
294260
* .append_int32(1)
295261
* .append_int64(20)
296262
* .end_row
@@ -561,7 +527,6 @@ void rbduckdb_init_duckdb_appender(void) {
561527
rb_define_alloc_func(cDuckDBAppender, allocate);
562528
rb_define_method(cDuckDBAppender, "initialize", appender_initialize, 3);
563529
rb_define_method(cDuckDBAppender, "error_message", appender_error_message, 0);
564-
rb_define_method(cDuckDBAppender, "begin_row", appender_begin_row, 0);
565530
rb_define_method(cDuckDBAppender, "end_row", appender_end_row, 0);
566531
rb_define_method(cDuckDBAppender, "append_bool", appender_append_bool, 1);
567532
rb_define_method(cDuckDBAppender, "append_int8", appender_append_int8, 1);

lib/duckdb/appender.rb

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,14 @@ class Appender
2323
private_constant :RANGE_INT16, :RANGE_INT32, :RANGE_INT64
2424
# :startdoc:
2525

26+
# :call-seq:
27+
# appender.begin_row -> self
28+
# A nop method, provided for backwards compatibility reasons.
29+
# Does nothing. Only `end_row` is required.
30+
def begin_row
31+
self
32+
end
33+
2634
# :call-seq:
2735
# flush -> self
2836
#
@@ -36,7 +44,6 @@ class Appender
3644
# con.query('CREATE TABLE users (id INTEGER, name VARCHAR)')
3745
# appender = con.appender('users')
3846
# appender
39-
# .begin_row
4047
# .append_int32(1)
4148
# .append_varchar('Alice')
4249
# .end_row
@@ -55,7 +62,6 @@ def flush
5562
# con.query('CREATE TABLE numbers (num HUGEINT)')
5663
# appender = con.appender('numbers')
5764
# appender
58-
# .begin_row
5965
# .append_hugeint(-170_141_183_460_469_231_731_687_303_715_884_105_727)
6066
# .end_row
6167
def append_hugeint(value)
@@ -71,7 +77,6 @@ def append_hugeint(value)
7177
# con.query('CREATE TABLE numbers (num UHUGEINT)')
7278
# appender = con.appender('numbers')
7379
# appender
74-
# .begin_row
7580
# .append_hugeint(340_282_366_920_938_463_463_374_607_431_768_211_455)
7681
# .end_row
7782
def append_uhugeint(value)
@@ -86,7 +91,6 @@ def append_uhugeint(value)
8691
# con = db.connect
8792
# con.query('CREATE TABLE dates (date_value DATE)')
8893
# appender = con.appender('dates')
89-
# appender.begin_row
9094
# appender.append_date(Date.today)
9195
# # or
9296
# # appender.append_date(Time.now)
@@ -106,7 +110,6 @@ def append_date(value)
106110
# con = db.connect
107111
# con.query('CREATE TABLE times (time_value TIME)')
108112
# appender = con.appender('times')
109-
# appender.begin_row
110113
# appender.append_time(Time.now)
111114
# # or
112115
# # appender.append_time('01:01:01')
@@ -125,7 +128,6 @@ def append_time(value)
125128
# con = db.connect
126129
# con.query('CREATE TABLE timestamps (timestamp_value TIMESTAMP)')
127130
# appender = con.appender('timestamps')
128-
# appender.begin_row
129131
# appender.append_time(Time.now)
130132
# # or
131133
# # appender.append_time(Date.today)
@@ -148,7 +150,6 @@ def append_timestamp(value)
148150
# con.query('CREATE TABLE intervals (interval_value INTERVAL)')
149151
# appender = con.appender('intervals')
150152
# appender
151-
# .begin_row
152153
# .append_interval('P1Y2D') # => append 1 year 2 days interval.
153154
# .end_row
154155
# .flush
@@ -164,7 +165,6 @@ def append_interval(value)
164165
# con = db.connect
165166
# con.query('CREATE TABLE users (id INTEGER, name VARCHAR)')
166167
# appender = con.appender('users')
167-
# appender.begin_row
168168
# appender.append(1)
169169
# appender.append('Alice')
170170
# appender.end_row
@@ -206,12 +206,10 @@ def append(value)
206206
#
207207
# is same as:
208208
#
209-
# appender.begin_row
210-
# appender.append(1)
209+
# appender.append(2)
211210
# appender.append('Alice')
212211
# appender.end_row
213212
def append_row(*args)
214-
begin_row
215213
args.each do |arg|
216214
append(arg)
217215
end

lib/duckdb/interval.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ module DuckDB
2424
# con.query('CREATE TABLE intervals (interval_value INTERVAL)')
2525
# appender = con.appender('intervals')
2626
# appender
27-
# .begin_row
2827
# .append_interval(interval)
2928
# .end_row
3029
# .flush

test/duckdb_test/appender_test.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ def test_s_new_with_schema
5151

5252
def sub_test_append_column2(method, type, values:, expected:)
5353
create_appender("col #{type}")
54-
@appender.begin_row
5554
@appender.send(method, *values)
5655
@appender.end_row
5756
@appender.flush
@@ -72,8 +71,6 @@ def sub_assert_equal(expected, actual)
7271
def assert_duckdb_appender(expected, type, &block)
7372
create_appender("col #{type}")
7473

75-
@appender.begin_row
76-
7774
block.call(@appender) if block_given?
7875

7976
@appender.end_row
@@ -88,10 +85,14 @@ def assert_duckdb_appender(expected, type, &block)
8885
teardown
8986
end
9087

88+
def test_begin_row
89+
appender = create_appender('col BOOLEAN')
90+
assert_equal(appender.__id__, appender.begin_row.__id__)
91+
end
92+
9193
def test_flush
9294
appender = create_appender('col BOOLEAN')
9395
appender
94-
.begin_row
9596
.append_bool(true)
9697
.end_row
9798
assert_equal(appender.__id__, appender.flush.__id__)
@@ -100,7 +101,6 @@ def test_flush
100101
def test_flush_with_exception
101102
appender = create_appender('col BOOLEAN NOT NULL')
102103
appender
103-
.begin_row
104104
.append_null
105105
.end_row
106106
exception = assert_raises(DuckDB::Error) { appender.flush }

0 commit comments

Comments
 (0)