Skip to content

Commit e65ed7b

Browse files
committed
cleanup
1 parent e1d01c4 commit e65ed7b

File tree

4 files changed

+85
-15
lines changed

4 files changed

+85
-15
lines changed

DuckDB.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class DuckDB
66
private FFI\CData $db;
77
private FFI\CData $conn;
88

9-
public function __construct(?string $databasePath, string $libraryPath, string $headersPath)
9+
public function __construct(string $databasePath, string $libraryPath, string $headersPath)
1010
{
1111
$this->ffi = FFI::cdef(file_get_contents($headersPath), $libraryPath);
1212

duckdb.h

+82-14
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,20 @@
1010

1111
#pragma once
1212

13+
#ifdef _WIN32
14+
#ifdef DUCKDB_BUILD_LIBRARY
15+
#define __declspec(dllexport)
16+
#else
17+
#define __declspec(dllimport)
18+
#endif
19+
#else
20+
#define DUCKDB_API
21+
#endif
22+
1323
#include <stdbool.h>
1424
#include <stdint.h>
1525
#include <stdlib.h>
1626

17-
#ifdef __cplusplus
18-
##extern "C" {
19-
#endif
20-
2127
typedef uint64_t idx_t;
2228

2329
typedef enum DUCKDB_TYPE {
@@ -36,8 +42,14 @@ typedef enum DUCKDB_TYPE {
3642
DUCKDB_TYPE_FLOAT,
3743
// double
3844
DUCKDB_TYPE_DOUBLE,
39-
// duckdb_timestamp
45+
// duckdb_timestamp (us)
4046
DUCKDB_TYPE_TIMESTAMP,
47+
// duckdb_timestamp (s)
48+
DUCKDB_TYPE_TIMESTAMP_S,
49+
// duckdb_timestamp (ns)
50+
DUCKDB_TYPE_TIMESTAMP_NS,
51+
// duckdb_timestamp (ms)
52+
DUCKDB_TYPE_TIMESTAMP_MS,
4153
// duckdb_date
4254
DUCKDB_TYPE_DATE,
4355
// duckdb_time
@@ -47,7 +59,9 @@ typedef enum DUCKDB_TYPE {
4759
// duckdb_hugeint
4860
DUCKDB_TYPE_HUGEINT,
4961
// const char*
50-
DUCKDB_TYPE_VARCHAR
62+
DUCKDB_TYPE_VARCHAR,
63+
// duckdb_blob
64+
DUCKDB_TYPE_BLOB
5165
} duckdb_type;
5266

5367
typedef struct {
@@ -60,7 +74,7 @@ typedef struct {
6074
int8_t hour;
6175
int8_t min;
6276
int8_t sec;
63-
int16_t msec;
77+
int16_t micros;
6478
} duckdb_time;
6579

6680
typedef struct {
@@ -71,14 +85,19 @@ typedef struct {
7185
typedef struct {
7286
int32_t months;
7387
int32_t days;
74-
int64_t msecs;
88+
int64_t micros;
7589
} duckdb_interval;
7690

7791
typedef struct {
7892
uint64_t lower;
7993
int64_t upper;
8094
} duckdb_hugeint;
8195

96+
typedef struct {
97+
void *data;
98+
idx_t size;
99+
} duckdb_blob;
100+
82101
typedef struct {
83102
void *data;
84103
bool *nullmask;
@@ -107,6 +126,7 @@ typedef struct {
107126
typedef void *duckdb_database;
108127
typedef void *duckdb_connection;
109128
typedef void *duckdb_prepared_statement;
129+
typedef void *duckdb_appender;
110130

111131
typedef enum { DuckDBSuccess = 0, DuckDBError = 1 } duckdb_state;
112132

@@ -144,18 +164,29 @@ int16_t duckdb_value_int16(duckdb_result *result, idx_t col, idx_t row);
144164
int32_t duckdb_value_int32(duckdb_result *result, idx_t col, idx_t row);
145165
//! Converts the specified value to an int64_t. Returns 0 on failure or NULL.
146166
int64_t duckdb_value_int64(duckdb_result *result, idx_t col, idx_t row);
167+
//! Converts the specified value to an uint8_t. Returns 0 on failure or NULL.
168+
uint8_t duckdb_value_uint8(duckdb_result *result, idx_t col, idx_t row);
169+
//! Converts the specified value to an uint16_t. Returns 0 on failure or NULL.
170+
uint16_t duckdb_value_uint16(duckdb_result *result, idx_t col, idx_t row);
171+
//! Converts the specified value to an uint64_t. Returns 0 on failure or NULL.
172+
uint32_t duckdb_value_uint32(duckdb_result *result, idx_t col, idx_t row);
173+
//! Converts the specified value to an uint64_t. Returns 0 on failure or NULL.
174+
uint64_t duckdb_value_uint64(duckdb_result *result, idx_t col, idx_t row);
147175
//! Converts the specified value to a float. Returns 0.0 on failure or NULL.
148176
float duckdb_value_float(duckdb_result *result, idx_t col, idx_t row);
149177
//! Converts the specified value to a double. Returns 0.0 on failure or NULL.
150178
double duckdb_value_double(duckdb_result *result, idx_t col, idx_t row);
151179
//! Converts the specified value to a string. Returns nullptr on failure or NULL. The result must be freed with free.
152180
char *duckdb_value_varchar(duckdb_result *result, idx_t col, idx_t row);
181+
//! Fetches a blob from a result set column. Returns a blob with blob.data set to nullptr on failure or NULL. The
182+
//! resulting "blob.data" must be freed with free.
183+
duckdb_blob duckdb_value_blob(duckdb_result *result, idx_t col, idx_t row);
153184

154185
// Prepared Statements
155186

156187
//! prepares the specified SQL query in the specified connection handle. [OUT: prepared statement descriptor]
157188
duckdb_state duckdb_prepare(duckdb_connection connection, const char *query,
158-
duckdb_prepared_statement *out_prepared_statement);
189+
duckdb_prepared_statement *out_prepared_statement);
159190

160191
duckdb_state duckdb_nparams(duckdb_prepared_statement prepared_statement, idx_t *nparams_out);
161192

@@ -165,17 +196,54 @@ duckdb_state duckdb_bind_int8(duckdb_prepared_statement prepared_statement, idx_
165196
duckdb_state duckdb_bind_int16(duckdb_prepared_statement prepared_statement, idx_t param_idx, int16_t val);
166197
duckdb_state duckdb_bind_int32(duckdb_prepared_statement prepared_statement, idx_t param_idx, int32_t val);
167198
duckdb_state duckdb_bind_int64(duckdb_prepared_statement prepared_statement, idx_t param_idx, int64_t val);
199+
#duckdb_state duckdb_bind_uint8(duckdb_prepared_statement prepared_statement, idx_t param_idx, int8_t val);
200+
#duckdb_state duckdb_bind_uint16(duckdb_prepared_statement prepared_statement, idx_t param_idx, int16_t val);
201+
duckdb_state duckdb_bind_uint32(duckdb_prepared_statement prepared_statement, idx_t param_idx, uint32_t val);
202+
duckdb_state duckdb_bind_uint64(duckdb_prepared_statement prepared_statement, idx_t param_idx, uint64_t val);
168203
duckdb_state duckdb_bind_float(duckdb_prepared_statement prepared_statement, idx_t param_idx, float val);
169204
duckdb_state duckdb_bind_double(duckdb_prepared_statement prepared_statement, idx_t param_idx, double val);
170-
duckdb_state duckdb_bind_varchar(duckdb_prepared_statement prepared_statement, idx_t param_idx, const char *val);
205+
duckdb_state duckdb_bind_varchar(duckdb_prepared_statement prepared_statement, idx_t param_idx,
206+
const char *val);
207+
duckdb_state duckdb_bind_varchar_length(duckdb_prepared_statement prepared_statement, idx_t param_idx,
208+
const char *val, idx_t length);
209+
duckdb_state duckdb_bind_blob(duckdb_prepared_statement prepared_statement, idx_t param_idx,
210+
const void *data, idx_t length);
171211
duckdb_state duckdb_bind_null(duckdb_prepared_statement prepared_statement, idx_t param_idx);
172212

173213
//! Executes the prepared statements with currently bound parameters
174-
duckdb_state duckdb_execute_prepared(duckdb_prepared_statement prepared_statement, duckdb_result *out_result);
214+
duckdb_state duckdb_execute_prepared(duckdb_prepared_statement prepared_statement,
215+
duckdb_result *out_result);
175216

176217
//! Destroys the specified prepared statement descriptor
177218
void duckdb_destroy_prepare(duckdb_prepared_statement *prepared_statement);
178219

179-
#ifdef __cplusplus
180-
##}
181-
#endif
220+
duckdb_state duckdb_appender_create(duckdb_connection connection, const char *schema, const char *table,
221+
duckdb_appender *out_appender);
222+
223+
duckdb_state duckdb_appender_begin_row(duckdb_appender appender);
224+
duckdb_state duckdb_appender_end_row(duckdb_appender appender);
225+
226+
duckdb_state duckdb_append_bool(duckdb_appender appender, bool value);
227+
228+
duckdb_state duckdb_append_int8(duckdb_appender appender, int8_t value);
229+
duckdb_state duckdb_append_int16(duckdb_appender appender, int16_t value);
230+
duckdb_state duckdb_append_int32(duckdb_appender appender, int32_t value);
231+
duckdb_state duckdb_append_int64(duckdb_appender appender, int64_t value);
232+
233+
duckdb_state duckdb_append_uint8(duckdb_appender appender, uint8_t value);
234+
duckdb_state duckdb_append_uint16(duckdb_appender appender, uint16_t value);
235+
duckdb_state duckdb_append_uint32(duckdb_appender appender, uint32_t value);
236+
duckdb_state duckdb_append_uint64(duckdb_appender appender, uint64_t value);
237+
238+
duckdb_state duckdb_append_float(duckdb_appender appender, float value);
239+
duckdb_state duckdb_append_double(duckdb_appender appender, double value);
240+
241+
duckdb_state duckdb_append_varchar(duckdb_appender appender, const char *val);
242+
duckdb_state duckdb_append_varchar_length(duckdb_appender appender, const char *val, idx_t length);
243+
duckdb_state duckdb_append_blob(duckdb_appender appender, const void *data, idx_t length);
244+
duckdb_state duckdb_append_null(duckdb_appender appender);
245+
246+
duckdb_state duckdb_appender_flush(duckdb_appender appender);
247+
duckdb_state duckdb_appender_close(duckdb_appender appender);
248+
249+
duckdb_state duckdb_appender_destroy(duckdb_appender *appender);

libduckdb.so

2.74 MB
Binary file not shown.

test.php

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?php
22

3+
// php -dffi.enable=1 test.php
4+
35
error_reporting(E_ALL);
46

57
require 'DuckDB.php';

0 commit comments

Comments
 (0)