Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e65ed7b

Browse files
cleanup
1 parent e1d01c4 commit e65ed7b

File tree

4 files changed

+85
-15
lines changed

4 files changed

+85
-15
lines changed

‎DuckDB.php

Lines changed: 1 addition & 1 deletion
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

Lines changed: 82 additions & 14 deletions
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

Lines changed: 2 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /