You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
5.7 KiB
189 lines
5.7 KiB
3 years ago
|
/*
|
||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||
|
*
|
||
|
* Copyright 1997 - July 2008 CWI, August 2008 - 2022 MonetDB B.V.
|
||
|
*/
|
||
|
|
||
|
#ifndef _MONETDBE_LIB_
|
||
|
#define _MONETDBE_LIB_
|
||
|
|
||
|
#include "monetdb_config.h"
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#include <stdint.h>
|
||
|
|
||
|
#ifdef WIN32
|
||
|
#ifndef LIBMONETDBE
|
||
|
#define monetdbe_export extern __declspec(dllimport)
|
||
|
#else
|
||
|
#define monetdbe_export extern __declspec(dllexport)
|
||
|
#endif
|
||
|
#else
|
||
|
#define monetdbe_export extern
|
||
|
#endif
|
||
|
|
||
|
typedef int64_t monetdbe_cnt;
|
||
|
|
||
|
typedef struct {
|
||
|
unsigned char day;
|
||
|
unsigned char month;
|
||
|
short year;
|
||
|
} monetdbe_data_date;
|
||
|
|
||
|
typedef struct {
|
||
|
unsigned int ms;
|
||
|
unsigned char seconds;
|
||
|
unsigned char minutes;
|
||
|
unsigned char hours;
|
||
|
} monetdbe_data_time;
|
||
|
|
||
|
typedef struct {
|
||
|
monetdbe_data_date date;
|
||
|
monetdbe_data_time time;
|
||
|
} monetdbe_data_timestamp;
|
||
|
|
||
|
typedef struct {
|
||
|
size_t size;
|
||
|
char* data;
|
||
|
} monetdbe_data_blob;
|
||
|
|
||
|
typedef enum {
|
||
|
monetdbe_bool, monetdbe_int8_t, monetdbe_int16_t, monetdbe_int32_t, monetdbe_int64_t,
|
||
|
#ifdef HAVE_HGE
|
||
|
monetdbe_int128_t,
|
||
|
#endif
|
||
|
monetdbe_size_t, monetdbe_float, monetdbe_double,
|
||
|
monetdbe_str, monetdbe_blob,
|
||
|
monetdbe_date, monetdbe_time, monetdbe_timestamp,
|
||
|
|
||
|
// should be last:
|
||
|
monetdbe_type_unknown
|
||
|
} monetdbe_types;
|
||
|
|
||
|
typedef struct {
|
||
|
char* name;
|
||
|
unsigned int scale;
|
||
|
unsigned int digits;
|
||
|
} monetdbe_sql_type;
|
||
|
|
||
|
typedef struct {
|
||
|
monetdbe_types type;
|
||
|
monetdbe_sql_type sql_type;
|
||
|
void *data;
|
||
|
size_t count;
|
||
|
char* name;
|
||
|
} monetdbe_column;
|
||
|
|
||
|
typedef struct {
|
||
|
size_t nparam;
|
||
|
monetdbe_types *type;
|
||
|
} monetdbe_statement;
|
||
|
|
||
|
typedef struct {
|
||
|
monetdbe_cnt nrows;
|
||
|
size_t ncols;
|
||
|
char *name;
|
||
|
monetdbe_cnt last_id; /* last auto incremented id */
|
||
|
} monetdbe_result;
|
||
|
|
||
|
typedef void* monetdbe_database;
|
||
|
|
||
|
typedef struct {
|
||
|
const char *host;
|
||
|
int port;
|
||
|
const char *database;
|
||
|
const char *username;
|
||
|
const char *password;
|
||
|
const char *lang;
|
||
|
} monetdbe_remote;
|
||
|
|
||
|
typedef struct {
|
||
|
const char* port;
|
||
|
const char* usock;
|
||
|
} monetdbe_mapi_server;
|
||
|
|
||
|
typedef struct {
|
||
|
int memorylimit; // top off the amount of RAM to be used, in MB
|
||
|
int querytimeout; // graceful terminate query after a few seconds
|
||
|
int sessiontimeout; // graceful terminate the session after a few seconds
|
||
|
int nr_threads; // maximum number of worker treads, limits level of parallelism
|
||
|
monetdbe_remote* remote;
|
||
|
monetdbe_mapi_server* mapi_server;
|
||
|
const char *trace_file; // file to which log output should be written
|
||
|
} monetdbe_options;
|
||
|
|
||
|
#define DEFAULT_STRUCT_DEFINITION(ctype, typename) \
|
||
|
typedef struct \
|
||
|
{ \
|
||
|
monetdbe_types type; \
|
||
|
monetdbe_sql_type sql_type; \
|
||
|
ctype *data; \
|
||
|
size_t count; \
|
||
|
char *name; \
|
||
|
ctype null_value; \
|
||
|
double scale; \
|
||
|
int (*is_null)(ctype *value); \
|
||
|
} monetdbe_column_##typename
|
||
|
|
||
|
DEFAULT_STRUCT_DEFINITION(int8_t, bool);
|
||
|
DEFAULT_STRUCT_DEFINITION(int8_t, int8_t);
|
||
|
DEFAULT_STRUCT_DEFINITION(int16_t, int16_t);
|
||
|
DEFAULT_STRUCT_DEFINITION(int32_t, int32_t);
|
||
|
DEFAULT_STRUCT_DEFINITION(int64_t, int64_t);
|
||
|
#ifdef HAVE_HGE
|
||
|
DEFAULT_STRUCT_DEFINITION(__int128, int128_t);
|
||
|
#endif
|
||
|
DEFAULT_STRUCT_DEFINITION(size_t, size_t);
|
||
|
|
||
|
DEFAULT_STRUCT_DEFINITION(float, float);
|
||
|
DEFAULT_STRUCT_DEFINITION(double, double);
|
||
|
|
||
|
DEFAULT_STRUCT_DEFINITION(char *, str);
|
||
|
DEFAULT_STRUCT_DEFINITION(monetdbe_data_blob, blob);
|
||
|
|
||
|
DEFAULT_STRUCT_DEFINITION(monetdbe_data_date, date);
|
||
|
DEFAULT_STRUCT_DEFINITION(monetdbe_data_time, time);
|
||
|
DEFAULT_STRUCT_DEFINITION(monetdbe_data_timestamp, timestamp);
|
||
|
// UUID, INET, XML ?
|
||
|
|
||
|
monetdbe_export const char *monetdbe_version(void);
|
||
|
|
||
|
monetdbe_export int monetdbe_open(monetdbe_database *db, char *url, monetdbe_options *opts);
|
||
|
/* 0 ok, -1 (allocation failed), -2 error in db */
|
||
|
monetdbe_export int monetdbe_close(monetdbe_database db);
|
||
|
|
||
|
monetdbe_export char* monetdbe_error(monetdbe_database db);
|
||
|
|
||
|
monetdbe_export char* monetdbe_get_autocommit(monetdbe_database dbhdl, int* result);
|
||
|
monetdbe_export char* monetdbe_set_autocommit(monetdbe_database dbhdl, int value);
|
||
|
monetdbe_export int monetdbe_in_transaction(monetdbe_database dbhdl);
|
||
|
|
||
|
monetdbe_export char* monetdbe_query(monetdbe_database dbhdl, char* query, monetdbe_result** result, monetdbe_cnt* affected_rows);
|
||
|
monetdbe_export char* monetdbe_result_fetch(monetdbe_result *mres, monetdbe_column** res, size_t column_index);
|
||
|
monetdbe_export char* monetdbe_cleanup_result(monetdbe_database dbhdl, monetdbe_result* result);
|
||
|
|
||
|
monetdbe_export char* monetdbe_prepare(monetdbe_database dbhdl, char *query, monetdbe_statement **stmt, monetdbe_result** result);
|
||
|
monetdbe_export char* monetdbe_bind(monetdbe_statement *stmt, void *data, size_t parameter_nr);
|
||
|
monetdbe_export char* monetdbe_execute(monetdbe_statement *stmt, monetdbe_result **result, monetdbe_cnt* affected_rows);
|
||
|
monetdbe_export char* monetdbe_cleanup_statement(monetdbe_database dbhdl, monetdbe_statement *stmt);
|
||
|
|
||
|
monetdbe_export char* monetdbe_append(monetdbe_database dbhdl, const char* schema, const char* table, monetdbe_column **input, size_t column_count);
|
||
|
monetdbe_export const void* monetdbe_null(monetdbe_database dbhdl, monetdbe_types t);
|
||
|
|
||
|
monetdbe_export char* monetdbe_get_columns(monetdbe_database dbhdl, const char* schema_name, const char *table_name, size_t *column_count, monetdbe_column **columns);
|
||
|
|
||
|
monetdbe_export char* monetdbe_dump_database(monetdbe_database dbhdl, const char *backupfile);
|
||
|
monetdbe_export char* monetdbe_dump_table(monetdbe_database dbhdl, const char *schema_name, const char *table_name, const char *backupfile);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#endif
|