forked from duckdb/duckdb-java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDuckDBAppender.java
More file actions
106 lines (86 loc) · 3.61 KB
/
DuckDBAppender.java
File metadata and controls
106 lines (86 loc) · 3.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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
61
62
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
97
98
99
100
101
102
103
104
105
106
package org.duckdb;
import java.math.BigDecimal;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.sql.SQLException;
import java.time.LocalDateTime;
import org.duckdb.DuckDBTimestamp;
public class DuckDBAppender implements AutoCloseable {
protected ByteBuffer appender_ref = null;
public DuckDBAppender(DuckDBConnection con, String schemaName, String tableName) throws SQLException {
if (con == null) {
throw new SQLException("Invalid connection");
}
appender_ref = DuckDBNative.duckdb_jdbc_create_appender(
con.connRef, schemaName.getBytes(StandardCharsets.UTF_8), tableName.getBytes(StandardCharsets.UTF_8));
}
public void beginRow() throws SQLException {
DuckDBNative.duckdb_jdbc_appender_begin_row(appender_ref);
}
public void endRow() throws SQLException {
DuckDBNative.duckdb_jdbc_appender_end_row(appender_ref);
}
public void flush() throws SQLException {
DuckDBNative.duckdb_jdbc_appender_flush(appender_ref);
}
public void append(boolean value) throws SQLException {
DuckDBNative.duckdb_jdbc_appender_append_boolean(appender_ref, value);
}
public void append(byte value) throws SQLException {
DuckDBNative.duckdb_jdbc_appender_append_byte(appender_ref, value);
}
public void append(short value) throws SQLException {
DuckDBNative.duckdb_jdbc_appender_append_short(appender_ref, value);
}
public void append(int value) throws SQLException {
DuckDBNative.duckdb_jdbc_appender_append_int(appender_ref, value);
}
public void append(long value) throws SQLException {
DuckDBNative.duckdb_jdbc_appender_append_long(appender_ref, value);
}
// New naming schema for object params to keep compatibility with calling "append(null)"
public void appendLocalDateTime(LocalDateTime value) throws SQLException {
if (value == null) {
DuckDBNative.duckdb_jdbc_appender_append_null(appender_ref);
} else {
long timeInMicros = DuckDBTimestamp.localDateTime2Micros(value);
DuckDBNative.duckdb_jdbc_appender_append_timestamp(appender_ref, timeInMicros);
}
}
public void appendBigDecimal(BigDecimal value) throws SQLException {
if (value == null) {
DuckDBNative.duckdb_jdbc_appender_append_null(appender_ref);
} else {
DuckDBNative.duckdb_jdbc_appender_append_decimal(appender_ref, value);
}
}
public void append(float value) throws SQLException {
DuckDBNative.duckdb_jdbc_appender_append_float(appender_ref, value);
}
public void append(double value) throws SQLException {
DuckDBNative.duckdb_jdbc_appender_append_double(appender_ref, value);
}
public void append(String value) throws SQLException {
if (value == null) {
DuckDBNative.duckdb_jdbc_appender_append_null(appender_ref);
} else {
DuckDBNative.duckdb_jdbc_appender_append_string(appender_ref, value.getBytes(StandardCharsets.UTF_8));
}
}
public void append(byte[] value) throws SQLException {
if (value == null) {
DuckDBNative.duckdb_jdbc_appender_append_null(appender_ref);
} else {
DuckDBNative.duckdb_jdbc_appender_append_bytes(appender_ref, value);
}
}
protected void finalize() throws Throwable {
close();
}
public synchronized void close() throws SQLException {
if (appender_ref != null) {
DuckDBNative.duckdb_jdbc_appender_close(appender_ref);
appender_ref = null;
}
}
}