1039 lines
43 KiB
C++
1039 lines
43 KiB
C++
|
// better_sqlite3.hpp
|
||
|
//
|
||
|
|
||
|
#ifndef LZZ_BETTER_SQLITE3_better_sqlite3_hpp
|
||
|
#define LZZ_BETTER_SQLITE3_better_sqlite3_hpp
|
||
|
#line 2 "./src/better_sqlite3.lzz"
|
||
|
#include <climits>
|
||
|
#include <cstdio>
|
||
|
#include <cstring>
|
||
|
#include <string>
|
||
|
#include <vector>
|
||
|
#include <set>
|
||
|
#include <unordered_map>
|
||
|
#include <algorithm>
|
||
|
#include <sqlite3.h>
|
||
|
#include <node.h>
|
||
|
#include <node_object_wrap.h>
|
||
|
#include <node_buffer.h>
|
||
|
#line 31 "./src/util/macros.lzz"
|
||
|
template <class T> using CopyablePersistent = v8::Persistent<T, v8::CopyablePersistentTraits<T>>;
|
||
|
#line 144 "./src/util/macros.lzz"
|
||
|
void SetPrototypeGetter(
|
||
|
v8::Isolate* isolate,
|
||
|
v8::Local<v8::External> data,
|
||
|
v8::Local<v8::FunctionTemplate> recv,
|
||
|
const char* name,
|
||
|
v8::AccessorGetterCallback func
|
||
|
);
|
||
|
#line 36 "./src/util/binder.lzz"
|
||
|
static bool IsPlainObject(v8::Isolate* isolate, v8::Local<v8::Object> obj);
|
||
|
#define LZZ_INLINE inline
|
||
|
#line 16 "./src/util/macros.lzz"
|
||
|
v8::Local <v8::String> StringFromUtf8 (v8::Isolate * isolate, char const * data, int length);
|
||
|
#line 19 "./src/util/macros.lzz"
|
||
|
v8::Local <v8::String> InternalizedFromUtf8 (v8::Isolate * isolate, char const * data, int length);
|
||
|
#line 22 "./src/util/macros.lzz"
|
||
|
v8::Local <v8::Value> InternalizedFromUtf8OrNull (v8::Isolate * isolate, char const * data, int length);
|
||
|
#line 26 "./src/util/macros.lzz"
|
||
|
v8::Local <v8::String> InternalizedFromLatin1 (v8::Isolate * isolate, char const * str);
|
||
|
#line 33 "./src/util/macros.lzz"
|
||
|
void SetFrozen (v8::Isolate * isolate, v8::Local <v8::Context> ctx, v8::Local <v8::Object> obj, CopyablePersistent <v8::String> & key, v8::Local <v8::Value> value);
|
||
|
#line 37 "./src/util/macros.lzz"
|
||
|
void ThrowError (char const * message);
|
||
|
#line 38 "./src/util/macros.lzz"
|
||
|
void ThrowTypeError (char const * message);
|
||
|
#line 39 "./src/util/macros.lzz"
|
||
|
void ThrowRangeError (char const * message);
|
||
|
#line 91 "./src/util/macros.lzz"
|
||
|
bool IS_SKIPPED (char c);
|
||
|
#line 96 "./src/util/macros.lzz"
|
||
|
template <typename T>
|
||
|
#line 96 "./src/util/macros.lzz"
|
||
|
T * ALLOC_ARRAY (size_t count);
|
||
|
#line 101 "./src/util/macros.lzz"
|
||
|
template <typename T>
|
||
|
#line 101 "./src/util/macros.lzz"
|
||
|
void FREE_ARRAY (T * array_pointer);
|
||
|
#line 105 "./src/util/macros.lzz"
|
||
|
v8::Local <v8::FunctionTemplate> NewConstructorTemplate (v8::Isolate * isolate, v8::Local <v8::External> data, v8::FunctionCallback func, char const * name);
|
||
|
#line 116 "./src/util/macros.lzz"
|
||
|
void SetPrototypeMethod (v8::Isolate * isolate, v8::Local <v8::External> data, v8::Local <v8::FunctionTemplate> recv, char const * name, v8::FunctionCallback func);
|
||
|
#line 129 "./src/util/macros.lzz"
|
||
|
void SetPrototypeSymbolMethod (v8::Isolate * isolate, v8::Local <v8::External> data, v8::Local <v8::FunctionTemplate> recv, v8::Local <v8::Symbol> symbol, v8::FunctionCallback func);
|
||
|
#line 1 "./src/util/constants.lzz"
|
||
|
class CS
|
||
|
{
|
||
|
#line 2 "./src/util/constants.lzz"
|
||
|
public:
|
||
|
#line 4 "./src/util/constants.lzz"
|
||
|
v8::Local <v8::String> Code (v8::Isolate * isolate, int code);
|
||
|
#line 10 "./src/util/constants.lzz"
|
||
|
explicit CS (v8::Isolate * isolate);
|
||
|
#line 119 "./src/util/constants.lzz"
|
||
|
CopyablePersistent <v8::String> database;
|
||
|
#line 120 "./src/util/constants.lzz"
|
||
|
CopyablePersistent <v8::String> reader;
|
||
|
#line 121 "./src/util/constants.lzz"
|
||
|
CopyablePersistent <v8::String> source;
|
||
|
#line 122 "./src/util/constants.lzz"
|
||
|
CopyablePersistent <v8::String> memory;
|
||
|
#line 123 "./src/util/constants.lzz"
|
||
|
CopyablePersistent <v8::String> readonly;
|
||
|
#line 124 "./src/util/constants.lzz"
|
||
|
CopyablePersistent <v8::String> name;
|
||
|
#line 125 "./src/util/constants.lzz"
|
||
|
CopyablePersistent <v8::String> next;
|
||
|
#line 126 "./src/util/constants.lzz"
|
||
|
CopyablePersistent <v8::String> length;
|
||
|
#line 127 "./src/util/constants.lzz"
|
||
|
CopyablePersistent <v8::String> done;
|
||
|
#line 128 "./src/util/constants.lzz"
|
||
|
CopyablePersistent <v8::String> value;
|
||
|
#line 129 "./src/util/constants.lzz"
|
||
|
CopyablePersistent <v8::String> changes;
|
||
|
#line 130 "./src/util/constants.lzz"
|
||
|
CopyablePersistent <v8::String> lastInsertRowid;
|
||
|
#line 131 "./src/util/constants.lzz"
|
||
|
CopyablePersistent <v8::String> statement;
|
||
|
#line 132 "./src/util/constants.lzz"
|
||
|
CopyablePersistent <v8::String> column;
|
||
|
#line 133 "./src/util/constants.lzz"
|
||
|
CopyablePersistent <v8::String> table;
|
||
|
#line 134 "./src/util/constants.lzz"
|
||
|
CopyablePersistent <v8::String> type;
|
||
|
#line 135 "./src/util/constants.lzz"
|
||
|
CopyablePersistent <v8::String> totalPages;
|
||
|
#line 136 "./src/util/constants.lzz"
|
||
|
CopyablePersistent <v8::String> remainingPages;
|
||
|
#line 138 "./src/util/constants.lzz"
|
||
|
private:
|
||
|
#line 140 "./src/util/constants.lzz"
|
||
|
static void SetString (v8::Isolate * isolate, CopyablePersistent <v8::String> & constant, char const * str);
|
||
|
#line 144 "./src/util/constants.lzz"
|
||
|
void SetCode (v8::Isolate * isolate, int code, char const * str);
|
||
|
#line 150 "./src/util/constants.lzz"
|
||
|
std::unordered_map <int, CopyablePersistent<v8::String> > codes;
|
||
|
};
|
||
|
#line 1 "./src/util/bind-map.lzz"
|
||
|
class BindMap
|
||
|
{
|
||
|
#line 2 "./src/util/bind-map.lzz"
|
||
|
public:
|
||
|
#line 6 "./src/util/bind-map.lzz"
|
||
|
class Pair
|
||
|
{
|
||
|
#line 6 "./src/util/bind-map.lzz"
|
||
|
friend class BindMap;
|
||
|
#line 7 "./src/util/bind-map.lzz"
|
||
|
public:
|
||
|
#line 9 "./src/util/bind-map.lzz"
|
||
|
int GetIndex ();
|
||
|
#line 13 "./src/util/bind-map.lzz"
|
||
|
v8::Local <v8::String> GetName (v8::Isolate * isolate);
|
||
|
#line 17 "./src/util/bind-map.lzz"
|
||
|
private:
|
||
|
#line 19 "./src/util/bind-map.lzz"
|
||
|
explicit Pair (v8::Isolate * isolate, char const * name, int index);
|
||
|
#line 22 "./src/util/bind-map.lzz"
|
||
|
explicit Pair (v8::Isolate * isolate, Pair * pair);
|
||
|
#line 25 "./src/util/bind-map.lzz"
|
||
|
CopyablePersistent <v8::String> const name;
|
||
|
#line 26 "./src/util/bind-map.lzz"
|
||
|
int const index;
|
||
|
};
|
||
|
#line 29 "./src/util/bind-map.lzz"
|
||
|
explicit BindMap (char _);
|
||
|
#line 36 "./src/util/bind-map.lzz"
|
||
|
~ BindMap ();
|
||
|
#line 41 "./src/util/bind-map.lzz"
|
||
|
Pair * GetPairs ();
|
||
|
#line 45 "./src/util/bind-map.lzz"
|
||
|
int GetSize ();
|
||
|
#line 50 "./src/util/bind-map.lzz"
|
||
|
void Add (v8::Isolate * isolate, char const * name, int index);
|
||
|
#line 56 "./src/util/bind-map.lzz"
|
||
|
private:
|
||
|
#line 58 "./src/util/bind-map.lzz"
|
||
|
void Grow (v8::Isolate * isolate);
|
||
|
#line 70 "./src/util/bind-map.lzz"
|
||
|
Pair * pairs;
|
||
|
#line 71 "./src/util/bind-map.lzz"
|
||
|
int capacity;
|
||
|
#line 72 "./src/util/bind-map.lzz"
|
||
|
int length;
|
||
|
};
|
||
|
#line 20 "./src/better_sqlite3.lzz"
|
||
|
struct Addon;
|
||
|
#line 21 "./src/better_sqlite3.lzz"
|
||
|
class Statement;
|
||
|
#line 22 "./src/better_sqlite3.lzz"
|
||
|
class Backup;
|
||
|
#line 1 "./src/objects/database.lzz"
|
||
|
class Database : public node::ObjectWrap
|
||
|
{
|
||
|
#line 2 "./src/objects/database.lzz"
|
||
|
public:
|
||
|
#line 4 "./src/objects/database.lzz"
|
||
|
static v8::Local <v8 :: Function> Init (v8::Isolate * isolate, v8::Local <v8 :: External> data);
|
||
|
#line 23 "./src/objects/database.lzz"
|
||
|
class CompareDatabase
|
||
|
{
|
||
|
#line 23 "./src/objects/database.lzz"
|
||
|
public:
|
||
|
#line 24 "./src/objects/database.lzz"
|
||
|
bool operator () (Database const * const a, Database const * const b) const;
|
||
|
};
|
||
|
#line 28 "./src/objects/database.lzz"
|
||
|
class CompareStatement
|
||
|
{
|
||
|
#line 28 "./src/objects/database.lzz"
|
||
|
public:
|
||
|
#line 29 "./src/objects/database.lzz"
|
||
|
bool operator () (Statement const * const a, Statement const * const b) const;
|
||
|
};
|
||
|
#line 33 "./src/objects/database.lzz"
|
||
|
class CompareBackup
|
||
|
{
|
||
|
#line 33 "./src/objects/database.lzz"
|
||
|
public:
|
||
|
#line 34 "./src/objects/database.lzz"
|
||
|
bool operator () (Backup const * const a, Backup const * const b) const;
|
||
|
};
|
||
|
#line 40 "./src/objects/database.lzz"
|
||
|
void ThrowDatabaseError ();
|
||
|
#line 44 "./src/objects/database.lzz"
|
||
|
static void ThrowSqliteError (Addon * addon, sqlite3 * db_handle);
|
||
|
#line 48 "./src/objects/database.lzz"
|
||
|
static void ThrowSqliteError (Addon * addon, char const * message, int code);
|
||
|
#line 64 "./src/objects/database.lzz"
|
||
|
bool Log (v8::Isolate * isolate, sqlite3_stmt * handle);
|
||
|
#line 77 "./src/objects/database.lzz"
|
||
|
void AddStatement (Statement * stmt);
|
||
|
#line 78 "./src/objects/database.lzz"
|
||
|
void RemoveStatement (Statement * stmt);
|
||
|
#line 81 "./src/objects/database.lzz"
|
||
|
void AddBackup (Backup * backup);
|
||
|
#line 82 "./src/objects/database.lzz"
|
||
|
void RemoveBackup (Backup * backup);
|
||
|
#line 86 "./src/objects/database.lzz"
|
||
|
struct State
|
||
|
{
|
||
|
#line 87 "./src/objects/database.lzz"
|
||
|
bool const open;
|
||
|
#line 88 "./src/objects/database.lzz"
|
||
|
bool busy;
|
||
|
#line 89 "./src/objects/database.lzz"
|
||
|
bool const safe_ints;
|
||
|
#line 90 "./src/objects/database.lzz"
|
||
|
bool const unsafe_mode;
|
||
|
#line 91 "./src/objects/database.lzz"
|
||
|
bool was_js_error;
|
||
|
#line 92 "./src/objects/database.lzz"
|
||
|
bool const has_logger;
|
||
|
#line 93 "./src/objects/database.lzz"
|
||
|
unsigned short int iterators;
|
||
|
#line 94 "./src/objects/database.lzz"
|
||
|
Addon * const addon;
|
||
|
};
|
||
|
#line 96 "./src/objects/database.lzz"
|
||
|
State * GetState ();
|
||
|
#line 99 "./src/objects/database.lzz"
|
||
|
sqlite3 * GetHandle ();
|
||
|
#line 102 "./src/objects/database.lzz"
|
||
|
Addon * GetAddon ();
|
||
|
#line 107 "./src/objects/database.lzz"
|
||
|
void CloseHandles ();
|
||
|
#line 119 "./src/objects/database.lzz"
|
||
|
~ Database ();
|
||
|
#line 124 "./src/objects/database.lzz"
|
||
|
private:
|
||
|
#line 126 "./src/objects/database.lzz"
|
||
|
explicit Database (v8::Isolate * isolate, Addon * addon, sqlite3 * db_handle, v8::Local <v8::Value> logger);
|
||
|
#line 149 "./src/objects/database.lzz"
|
||
|
static void JS_new (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 201 "./src/objects/database.lzz"
|
||
|
static void JS_prepare (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 217 "./src/objects/database.lzz"
|
||
|
static void JS_exec (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 257 "./src/objects/database.lzz"
|
||
|
static void JS_backup (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 275 "./src/objects/database.lzz"
|
||
|
static void JS_serialize (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 297 "./src/objects/database.lzz"
|
||
|
static void JS_function (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 321 "./src/objects/database.lzz"
|
||
|
static void JS_aggregate (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 350 "./src/objects/database.lzz"
|
||
|
static void JS_table (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 370 "./src/objects/database.lzz"
|
||
|
static void JS_loadExtension (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 392 "./src/objects/database.lzz"
|
||
|
static void JS_close (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 402 "./src/objects/database.lzz"
|
||
|
static void JS_defaultSafeIntegers (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 408 "./src/objects/database.lzz"
|
||
|
static void JS_unsafeMode (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 415 "./src/objects/database.lzz"
|
||
|
static void JS_open (v8::Local <v8 :: String> _, v8::PropertyCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 419 "./src/objects/database.lzz"
|
||
|
static void JS_inTransaction (v8::Local <v8 :: String> _, v8::PropertyCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 424 "./src/objects/database.lzz"
|
||
|
static bool Deserialize (v8::Local <v8::Object> buffer, Addon * addon, sqlite3 * db_handle, bool readonly);
|
||
|
#line 449 "./src/objects/database.lzz"
|
||
|
static void FreeSerialization (char * data, void * _);
|
||
|
#line 453 "./src/objects/database.lzz"
|
||
|
static int const MAX_BUFFER_SIZE = node::Buffer::kMaxLength > INT_MAX ? INT_MAX : static_cast<int>(node::Buffer::kMaxLength);
|
||
|
#line 454 "./src/objects/database.lzz"
|
||
|
static int const MAX_STRING_SIZE = v8::String::kMaxLength > INT_MAX ? INT_MAX : static_cast<int>(v8::String::kMaxLength);
|
||
|
#line 456 "./src/objects/database.lzz"
|
||
|
sqlite3 * const db_handle;
|
||
|
#line 457 "./src/objects/database.lzz"
|
||
|
bool open;
|
||
|
#line 458 "./src/objects/database.lzz"
|
||
|
bool busy;
|
||
|
#line 459 "./src/objects/database.lzz"
|
||
|
bool safe_ints;
|
||
|
#line 460 "./src/objects/database.lzz"
|
||
|
bool unsafe_mode;
|
||
|
#line 461 "./src/objects/database.lzz"
|
||
|
bool was_js_error;
|
||
|
#line 462 "./src/objects/database.lzz"
|
||
|
bool const has_logger;
|
||
|
#line 463 "./src/objects/database.lzz"
|
||
|
unsigned short int iterators;
|
||
|
#line 464 "./src/objects/database.lzz"
|
||
|
Addon * const addon;
|
||
|
#line 465 "./src/objects/database.lzz"
|
||
|
CopyablePersistent <v8::Value> const logger;
|
||
|
#line 466 "./src/objects/database.lzz"
|
||
|
std::set <Statement*, CompareStatement> stmts;
|
||
|
#line 467 "./src/objects/database.lzz"
|
||
|
std::set <Backup*, CompareBackup> backups;
|
||
|
};
|
||
|
#line 1 "./src/objects/statement.lzz"
|
||
|
class Statement : public node::ObjectWrap
|
||
|
{
|
||
|
#line 1 "./src/objects/statement.lzz"
|
||
|
friend class StatementIterator;
|
||
|
#line 2 "./src/objects/statement.lzz"
|
||
|
public:
|
||
|
#line 4 "./src/objects/statement.lzz"
|
||
|
static v8::Local <v8 :: Function> Init (v8::Isolate * isolate, v8::Local <v8 :: External> data);
|
||
|
#line 21 "./src/objects/statement.lzz"
|
||
|
static bool Compare (Statement const * const a, Statement const * const b);
|
||
|
#line 26 "./src/objects/statement.lzz"
|
||
|
BindMap * GetBindMap (v8::Isolate * isolate);
|
||
|
#line 39 "./src/objects/statement.lzz"
|
||
|
void CloseHandles ();
|
||
|
#line 46 "./src/objects/statement.lzz"
|
||
|
~ Statement ();
|
||
|
#line 52 "./src/objects/statement.lzz"
|
||
|
private:
|
||
|
#line 55 "./src/objects/statement.lzz"
|
||
|
class Extras
|
||
|
{
|
||
|
#line 55 "./src/objects/statement.lzz"
|
||
|
friend class Statement;
|
||
|
#line 56 "./src/objects/statement.lzz"
|
||
|
explicit Extras (sqlite3_uint64 id);
|
||
|
#line 57 "./src/objects/statement.lzz"
|
||
|
BindMap bind_map;
|
||
|
#line 58 "./src/objects/statement.lzz"
|
||
|
sqlite3_uint64 const id;
|
||
|
};
|
||
|
#line 61 "./src/objects/statement.lzz"
|
||
|
explicit Statement (Database * db, sqlite3_stmt * handle, sqlite3_uint64 id, bool returns_data);
|
||
|
#line 85 "./src/objects/statement.lzz"
|
||
|
static void JS_new (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 156 "./src/objects/statement.lzz"
|
||
|
static void JS_run (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 179 "./src/objects/statement.lzz"
|
||
|
static void JS_get (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 194 "./src/objects/statement.lzz"
|
||
|
static void JS_all (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 215 "./src/objects/statement.lzz"
|
||
|
static void JS_iterate (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 225 "./src/objects/statement.lzz"
|
||
|
static void JS_bind (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 236 "./src/objects/statement.lzz"
|
||
|
static void JS_pluck (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 247 "./src/objects/statement.lzz"
|
||
|
static void JS_expand (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 258 "./src/objects/statement.lzz"
|
||
|
static void JS_raw (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 269 "./src/objects/statement.lzz"
|
||
|
static void JS_safeIntegers (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 278 "./src/objects/statement.lzz"
|
||
|
static void JS_columns (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 321 "./src/objects/statement.lzz"
|
||
|
static void JS_busy (v8::Local <v8 :: String> _, v8::PropertyCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 326 "./src/objects/statement.lzz"
|
||
|
Database * const db;
|
||
|
#line 327 "./src/objects/statement.lzz"
|
||
|
sqlite3_stmt * const handle;
|
||
|
#line 328 "./src/objects/statement.lzz"
|
||
|
Extras * const extras;
|
||
|
#line 329 "./src/objects/statement.lzz"
|
||
|
bool alive;
|
||
|
#line 330 "./src/objects/statement.lzz"
|
||
|
bool locked;
|
||
|
#line 331 "./src/objects/statement.lzz"
|
||
|
bool bound;
|
||
|
#line 332 "./src/objects/statement.lzz"
|
||
|
bool has_bind_map;
|
||
|
#line 333 "./src/objects/statement.lzz"
|
||
|
bool safe_ints;
|
||
|
#line 334 "./src/objects/statement.lzz"
|
||
|
char mode;
|
||
|
#line 335 "./src/objects/statement.lzz"
|
||
|
bool const returns_data;
|
||
|
};
|
||
|
#line 1 "./src/objects/statement-iterator.lzz"
|
||
|
class StatementIterator : public node::ObjectWrap
|
||
|
{
|
||
|
#line 2 "./src/objects/statement-iterator.lzz"
|
||
|
public:
|
||
|
#line 4 "./src/objects/statement-iterator.lzz"
|
||
|
static v8::Local <v8 :: Function> Init (v8::Isolate * isolate, v8::Local <v8 :: External> data);
|
||
|
#line 15 "./src/objects/statement-iterator.lzz"
|
||
|
~ StatementIterator ();
|
||
|
#line 17 "./src/objects/statement-iterator.lzz"
|
||
|
private:
|
||
|
#line 19 "./src/objects/statement-iterator.lzz"
|
||
|
explicit StatementIterator (Statement * stmt, bool bound);
|
||
|
#line 38 "./src/objects/statement-iterator.lzz"
|
||
|
static void JS_new (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 57 "./src/objects/statement-iterator.lzz"
|
||
|
static void JS_next (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 64 "./src/objects/statement-iterator.lzz"
|
||
|
static void JS_return (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 71 "./src/objects/statement-iterator.lzz"
|
||
|
static void JS_symbolIterator (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 75 "./src/objects/statement-iterator.lzz"
|
||
|
void Next (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 100 "./src/objects/statement-iterator.lzz"
|
||
|
void Return (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 105 "./src/objects/statement-iterator.lzz"
|
||
|
void Throw ();
|
||
|
#line 111 "./src/objects/statement-iterator.lzz"
|
||
|
void Cleanup ();
|
||
|
#line 119 "./src/objects/statement-iterator.lzz"
|
||
|
static v8::Local <v8::Object> NewRecord (v8::Isolate * isolate, v8::Local <v8::Context> ctx, v8::Local <v8::Value> value, Addon * addon, bool done);
|
||
|
#line 126 "./src/objects/statement-iterator.lzz"
|
||
|
static v8::Local <v8::Object> DoneRecord (v8::Isolate * isolate, Addon * addon);
|
||
|
#line 130 "./src/objects/statement-iterator.lzz"
|
||
|
Statement * const stmt;
|
||
|
#line 131 "./src/objects/statement-iterator.lzz"
|
||
|
sqlite3_stmt * const handle;
|
||
|
#line 132 "./src/objects/statement-iterator.lzz"
|
||
|
Database::State * const db_state;
|
||
|
#line 133 "./src/objects/statement-iterator.lzz"
|
||
|
bool const bound;
|
||
|
#line 134 "./src/objects/statement-iterator.lzz"
|
||
|
bool const safe_ints;
|
||
|
#line 135 "./src/objects/statement-iterator.lzz"
|
||
|
char const mode;
|
||
|
#line 136 "./src/objects/statement-iterator.lzz"
|
||
|
bool alive;
|
||
|
#line 137 "./src/objects/statement-iterator.lzz"
|
||
|
bool logged;
|
||
|
};
|
||
|
#line 1 "./src/objects/backup.lzz"
|
||
|
class Backup : public node::ObjectWrap
|
||
|
{
|
||
|
#line 2 "./src/objects/backup.lzz"
|
||
|
public:
|
||
|
#line 4 "./src/objects/backup.lzz"
|
||
|
static v8::Local <v8 :: Function> Init (v8::Isolate * isolate, v8::Local <v8 :: External> data);
|
||
|
#line 12 "./src/objects/backup.lzz"
|
||
|
static bool Compare (Backup const * const a, Backup const * const b);
|
||
|
#line 17 "./src/objects/backup.lzz"
|
||
|
void CloseHandles ();
|
||
|
#line 28 "./src/objects/backup.lzz"
|
||
|
~ Backup ();
|
||
|
#line 33 "./src/objects/backup.lzz"
|
||
|
private:
|
||
|
#line 35 "./src/objects/backup.lzz"
|
||
|
explicit Backup (Database * db, sqlite3 * dest_handle, sqlite3_backup * backup_handle, sqlite3_uint64 id, bool unlink);
|
||
|
#line 55 "./src/objects/backup.lzz"
|
||
|
static void JS_new (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 98 "./src/objects/backup.lzz"
|
||
|
static void JS_transfer (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 124 "./src/objects/backup.lzz"
|
||
|
static void JS_close (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 132 "./src/objects/backup.lzz"
|
||
|
Database * const db;
|
||
|
#line 133 "./src/objects/backup.lzz"
|
||
|
sqlite3 * const dest_handle;
|
||
|
#line 134 "./src/objects/backup.lzz"
|
||
|
sqlite3_backup * const backup_handle;
|
||
|
#line 135 "./src/objects/backup.lzz"
|
||
|
sqlite3_uint64 const id;
|
||
|
#line 136 "./src/objects/backup.lzz"
|
||
|
bool alive;
|
||
|
#line 137 "./src/objects/backup.lzz"
|
||
|
bool unlink;
|
||
|
};
|
||
|
#line 1 "./src/util/data-converter.lzz"
|
||
|
class DataConverter
|
||
|
{
|
||
|
#line 2 "./src/util/data-converter.lzz"
|
||
|
public:
|
||
|
#line 4 "./src/util/data-converter.lzz"
|
||
|
void ThrowDataConversionError (sqlite3_context * invocation, bool isBigInt);
|
||
|
#line 13 "./src/util/data-converter.lzz"
|
||
|
protected:
|
||
|
#line 15 "./src/util/data-converter.lzz"
|
||
|
virtual void PropagateJSError (sqlite3_context * invocation) = 0;
|
||
|
#line 16 "./src/util/data-converter.lzz"
|
||
|
virtual std::string GetDataErrorPrefix () = 0;
|
||
|
};
|
||
|
#line 1 "./src/util/custom-function.lzz"
|
||
|
class CustomFunction : protected DataConverter
|
||
|
{
|
||
|
#line 2 "./src/util/custom-function.lzz"
|
||
|
public:
|
||
|
#line 4 "./src/util/custom-function.lzz"
|
||
|
explicit CustomFunction (v8::Isolate * isolate, Database * db, char const * name, v8::Local <v8::Function> fn, bool safe_ints);
|
||
|
#line 17 "./src/util/custom-function.lzz"
|
||
|
virtual ~ CustomFunction ();
|
||
|
#line 19 "./src/util/custom-function.lzz"
|
||
|
static void xDestroy (void * self);
|
||
|
#line 23 "./src/util/custom-function.lzz"
|
||
|
static void xFunc (sqlite3_context * invocation, int argc, sqlite3_value * * argv);
|
||
|
#line 40 "./src/util/custom-function.lzz"
|
||
|
protected:
|
||
|
#line 42 "./src/util/custom-function.lzz"
|
||
|
void PropagateJSError (sqlite3_context * invocation);
|
||
|
#line 48 "./src/util/custom-function.lzz"
|
||
|
std::string GetDataErrorPrefix ();
|
||
|
#line 52 "./src/util/custom-function.lzz"
|
||
|
private:
|
||
|
#line 53 "./src/util/custom-function.lzz"
|
||
|
std::string const name;
|
||
|
#line 54 "./src/util/custom-function.lzz"
|
||
|
Database * const db;
|
||
|
#line 55 "./src/util/custom-function.lzz"
|
||
|
protected:
|
||
|
#line 56 "./src/util/custom-function.lzz"
|
||
|
v8::Isolate * const isolate;
|
||
|
#line 57 "./src/util/custom-function.lzz"
|
||
|
CopyablePersistent <v8::Function> const fn;
|
||
|
#line 58 "./src/util/custom-function.lzz"
|
||
|
bool const safe_ints;
|
||
|
};
|
||
|
#line 1 "./src/util/custom-aggregate.lzz"
|
||
|
class CustomAggregate : public CustomFunction
|
||
|
{
|
||
|
#line 2 "./src/util/custom-aggregate.lzz"
|
||
|
public:
|
||
|
#line 4 "./src/util/custom-aggregate.lzz"
|
||
|
explicit CustomAggregate (v8::Isolate * isolate, Database * db, char const * name, v8::Local <v8::Value> start, v8::Local <v8::Function> step, v8::Local <v8::Value> inverse, v8::Local <v8::Value> result, bool safe_ints);
|
||
|
#line 21 "./src/util/custom-aggregate.lzz"
|
||
|
static void xStep (sqlite3_context * invocation, int argc, sqlite3_value * * argv);
|
||
|
#line 25 "./src/util/custom-aggregate.lzz"
|
||
|
static void xInverse (sqlite3_context * invocation, int argc, sqlite3_value * * argv);
|
||
|
#line 29 "./src/util/custom-aggregate.lzz"
|
||
|
static void xValue (sqlite3_context * invocation);
|
||
|
#line 33 "./src/util/custom-aggregate.lzz"
|
||
|
static void xFinal (sqlite3_context * invocation);
|
||
|
#line 37 "./src/util/custom-aggregate.lzz"
|
||
|
private:
|
||
|
#line 39 "./src/util/custom-aggregate.lzz"
|
||
|
static void xStepBase (sqlite3_context * invocation, int argc, sqlite3_value * * argv, CopyablePersistent <v8::Function> const CustomAggregate::* ptrtm);
|
||
|
#line 58 "./src/util/custom-aggregate.lzz"
|
||
|
static void xValueBase (sqlite3_context * invocation, bool is_final);
|
||
|
#line 82 "./src/util/custom-aggregate.lzz"
|
||
|
struct Accumulator
|
||
|
{
|
||
|
#line 82 "./src/util/custom-aggregate.lzz"
|
||
|
public:
|
||
|
#line 83 "./src/util/custom-aggregate.lzz"
|
||
|
CopyablePersistent <v8::Value> value;
|
||
|
#line 84 "./src/util/custom-aggregate.lzz"
|
||
|
bool initialized;
|
||
|
#line 85 "./src/util/custom-aggregate.lzz"
|
||
|
bool is_window;
|
||
|
};
|
||
|
#line 88 "./src/util/custom-aggregate.lzz"
|
||
|
Accumulator * GetAccumulator (sqlite3_context * invocation);
|
||
|
#line 105 "./src/util/custom-aggregate.lzz"
|
||
|
static void DestroyAccumulator (sqlite3_context * invocation);
|
||
|
#line 111 "./src/util/custom-aggregate.lzz"
|
||
|
void PropagateJSError (sqlite3_context * invocation);
|
||
|
#line 116 "./src/util/custom-aggregate.lzz"
|
||
|
bool const invoke_result;
|
||
|
#line 117 "./src/util/custom-aggregate.lzz"
|
||
|
bool const invoke_start;
|
||
|
#line 118 "./src/util/custom-aggregate.lzz"
|
||
|
CopyablePersistent <v8::Function> const inverse;
|
||
|
#line 119 "./src/util/custom-aggregate.lzz"
|
||
|
CopyablePersistent <v8::Function> const result;
|
||
|
#line 120 "./src/util/custom-aggregate.lzz"
|
||
|
CopyablePersistent <v8::Value> const start;
|
||
|
};
|
||
|
#line 1 "./src/util/custom-table.lzz"
|
||
|
class CustomTable
|
||
|
{
|
||
|
#line 2 "./src/util/custom-table.lzz"
|
||
|
public:
|
||
|
#line 4 "./src/util/custom-table.lzz"
|
||
|
explicit CustomTable (v8::Isolate * isolate, Database * db, char const * name, v8::Local <v8::Function> factory);
|
||
|
#line 16 "./src/util/custom-table.lzz"
|
||
|
static void Destructor (void * self);
|
||
|
#line 20 "./src/util/custom-table.lzz"
|
||
|
static sqlite3_module MODULE;
|
||
|
#line 47 "./src/util/custom-table.lzz"
|
||
|
static sqlite3_module EPONYMOUS_MODULE;
|
||
|
#line 74 "./src/util/custom-table.lzz"
|
||
|
private:
|
||
|
#line 77 "./src/util/custom-table.lzz"
|
||
|
class VTab
|
||
|
{
|
||
|
#line 77 "./src/util/custom-table.lzz"
|
||
|
friend class CustomTable;
|
||
|
#line 78 "./src/util/custom-table.lzz"
|
||
|
explicit VTab (CustomTable * parent, v8::Local <v8::Function> generator, std::vector <std::string> parameter_names, bool safe_ints);
|
||
|
#line 92 "./src/util/custom-table.lzz"
|
||
|
static CustomTable::VTab * Upcast (sqlite3_vtab * vtab);
|
||
|
#line 96 "./src/util/custom-table.lzz"
|
||
|
sqlite3_vtab * Downcast ();
|
||
|
#line 100 "./src/util/custom-table.lzz"
|
||
|
sqlite3_vtab base;
|
||
|
#line 101 "./src/util/custom-table.lzz"
|
||
|
CustomTable * const parent;
|
||
|
#line 102 "./src/util/custom-table.lzz"
|
||
|
int const parameter_count;
|
||
|
#line 103 "./src/util/custom-table.lzz"
|
||
|
bool const safe_ints;
|
||
|
#line 104 "./src/util/custom-table.lzz"
|
||
|
CopyablePersistent <v8::Function> const generator;
|
||
|
#line 105 "./src/util/custom-table.lzz"
|
||
|
std::vector <std::string> const parameter_names;
|
||
|
};
|
||
|
#line 109 "./src/util/custom-table.lzz"
|
||
|
class Cursor
|
||
|
{
|
||
|
#line 109 "./src/util/custom-table.lzz"
|
||
|
friend class CustomTable;
|
||
|
#line 110 "./src/util/custom-table.lzz"
|
||
|
static CustomTable::Cursor * Upcast (sqlite3_vtab_cursor * cursor);
|
||
|
#line 114 "./src/util/custom-table.lzz"
|
||
|
sqlite3_vtab_cursor * Downcast ();
|
||
|
#line 118 "./src/util/custom-table.lzz"
|
||
|
CustomTable::VTab * GetVTab ();
|
||
|
#line 122 "./src/util/custom-table.lzz"
|
||
|
sqlite3_vtab_cursor base;
|
||
|
#line 123 "./src/util/custom-table.lzz"
|
||
|
CopyablePersistent <v8::Object> iterator;
|
||
|
#line 124 "./src/util/custom-table.lzz"
|
||
|
CopyablePersistent <v8::Function> next;
|
||
|
#line 125 "./src/util/custom-table.lzz"
|
||
|
CopyablePersistent <v8::Array> row;
|
||
|
#line 126 "./src/util/custom-table.lzz"
|
||
|
bool done;
|
||
|
#line 127 "./src/util/custom-table.lzz"
|
||
|
sqlite_int64 rowid;
|
||
|
};
|
||
|
#line 131 "./src/util/custom-table.lzz"
|
||
|
class TempDataConverter : DataConverter
|
||
|
{
|
||
|
#line 131 "./src/util/custom-table.lzz"
|
||
|
friend class CustomTable;
|
||
|
#line 132 "./src/util/custom-table.lzz"
|
||
|
explicit TempDataConverter (CustomTable * parent);
|
||
|
#line 136 "./src/util/custom-table.lzz"
|
||
|
void PropagateJSError (sqlite3_context * invocation);
|
||
|
#line 141 "./src/util/custom-table.lzz"
|
||
|
std::string GetDataErrorPrefix ();
|
||
|
#line 145 "./src/util/custom-table.lzz"
|
||
|
CustomTable * const parent;
|
||
|
#line 146 "./src/util/custom-table.lzz"
|
||
|
int status;
|
||
|
};
|
||
|
#line 151 "./src/util/custom-table.lzz"
|
||
|
static int xCreate (sqlite3 * db_handle, void * _self, int argc, char const * const * argv, sqlite3_vtab * * output, char * * errOutput);
|
||
|
#line 156 "./src/util/custom-table.lzz"
|
||
|
static int xConnect (sqlite3 * db_handle, void * _self, int argc, char const * const * argv, sqlite3_vtab * * output, char * * errOutput);
|
||
|
#line 210 "./src/util/custom-table.lzz"
|
||
|
static int xDisconnect (sqlite3_vtab * vtab);
|
||
|
#line 215 "./src/util/custom-table.lzz"
|
||
|
static int xOpen (sqlite3_vtab * vtab, sqlite3_vtab_cursor * * output);
|
||
|
#line 220 "./src/util/custom-table.lzz"
|
||
|
static int xClose (sqlite3_vtab_cursor * cursor);
|
||
|
#line 228 "./src/util/custom-table.lzz"
|
||
|
static int xFilter (sqlite3_vtab_cursor * _cursor, int idxNum, char const * idxStr, int argc, sqlite3_value * * argv);
|
||
|
#line 284 "./src/util/custom-table.lzz"
|
||
|
static int xNext (sqlite3_vtab_cursor * _cursor);
|
||
|
#line 313 "./src/util/custom-table.lzz"
|
||
|
static int xEof (sqlite3_vtab_cursor * cursor);
|
||
|
#line 318 "./src/util/custom-table.lzz"
|
||
|
static int xColumn (sqlite3_vtab_cursor * _cursor, sqlite3_context * invocation, int column);
|
||
|
#line 336 "./src/util/custom-table.lzz"
|
||
|
static int xRowid (sqlite3_vtab_cursor * cursor, sqlite_int64 * output);
|
||
|
#line 343 "./src/util/custom-table.lzz"
|
||
|
static int xBestIndex (sqlite3_vtab * vtab, sqlite3_index_info * output);
|
||
|
#line 394 "./src/util/custom-table.lzz"
|
||
|
void PropagateJSError ();
|
||
|
#line 399 "./src/util/custom-table.lzz"
|
||
|
Addon * const addon;
|
||
|
#line 400 "./src/util/custom-table.lzz"
|
||
|
v8::Isolate * const isolate;
|
||
|
#line 401 "./src/util/custom-table.lzz"
|
||
|
Database * const db;
|
||
|
#line 402 "./src/util/custom-table.lzz"
|
||
|
std::string const name;
|
||
|
#line 403 "./src/util/custom-table.lzz"
|
||
|
CopyablePersistent <v8::Function> const factory;
|
||
|
};
|
||
|
#line 65 "./src/util/data.lzz"
|
||
|
namespace Data
|
||
|
{
|
||
|
#line 72 "./src/util/data.lzz"
|
||
|
v8::Local <v8::Value> GetValueJS (v8::Isolate * isolate, sqlite3_stmt * handle, int column, bool safe_ints);
|
||
|
}
|
||
|
#line 65 "./src/util/data.lzz"
|
||
|
namespace Data
|
||
|
{
|
||
|
#line 76 "./src/util/data.lzz"
|
||
|
v8::Local <v8::Value> GetValueJS (v8::Isolate * isolate, sqlite3_value * value, bool safe_ints);
|
||
|
}
|
||
|
#line 65 "./src/util/data.lzz"
|
||
|
namespace Data
|
||
|
{
|
||
|
#line 80 "./src/util/data.lzz"
|
||
|
v8::Local <v8::Value> GetFlatRowJS (v8::Isolate * isolate, v8::Local <v8::Context> ctx, sqlite3_stmt * handle, bool safe_ints);
|
||
|
}
|
||
|
#line 65 "./src/util/data.lzz"
|
||
|
namespace Data
|
||
|
{
|
||
|
#line 91 "./src/util/data.lzz"
|
||
|
v8::Local <v8::Value> GetExpandedRowJS (v8::Isolate * isolate, v8::Local <v8::Context> ctx, sqlite3_stmt * handle, bool safe_ints);
|
||
|
}
|
||
|
#line 65 "./src/util/data.lzz"
|
||
|
namespace Data
|
||
|
{
|
||
|
#line 110 "./src/util/data.lzz"
|
||
|
v8::Local <v8::Value> GetRawRowJS (v8::Isolate * isolate, v8::Local <v8::Context> ctx, sqlite3_stmt * handle, bool safe_ints);
|
||
|
}
|
||
|
#line 65 "./src/util/data.lzz"
|
||
|
namespace Data
|
||
|
{
|
||
|
#line 119 "./src/util/data.lzz"
|
||
|
v8::Local <v8::Value> GetRowJS (v8::Isolate * isolate, v8::Local <v8::Context> ctx, sqlite3_stmt * handle, bool safe_ints, char mode);
|
||
|
}
|
||
|
#line 65 "./src/util/data.lzz"
|
||
|
namespace Data
|
||
|
{
|
||
|
#line 128 "./src/util/data.lzz"
|
||
|
void GetArgumentsJS (v8::Isolate * isolate, v8::Local <v8::Value> * out, sqlite3_value * * values, int argument_count, bool safe_ints);
|
||
|
}
|
||
|
#line 65 "./src/util/data.lzz"
|
||
|
namespace Data
|
||
|
{
|
||
|
#line 135 "./src/util/data.lzz"
|
||
|
int BindValueFromJS (v8::Isolate * isolate, sqlite3_stmt * handle, int index, v8::Local <v8::Value> value);
|
||
|
}
|
||
|
#line 65 "./src/util/data.lzz"
|
||
|
namespace Data
|
||
|
{
|
||
|
#line 140 "./src/util/data.lzz"
|
||
|
void ResultValueFromJS (v8::Isolate * isolate, sqlite3_context * invocation, v8::Local <v8::Value> value, DataConverter * converter);
|
||
|
}
|
||
|
#line 1 "./src/util/binder.lzz"
|
||
|
class Binder
|
||
|
{
|
||
|
#line 2 "./src/util/binder.lzz"
|
||
|
public:
|
||
|
#line 4 "./src/util/binder.lzz"
|
||
|
explicit Binder (sqlite3_stmt * _handle);
|
||
|
#line 11 "./src/util/binder.lzz"
|
||
|
bool Bind (v8::FunctionCallbackInfo <v8 :: Value> const & info, int argc, Statement * stmt);
|
||
|
#line 28 "./src/util/binder.lzz"
|
||
|
private:
|
||
|
#line 30 "./src/util/binder.lzz"
|
||
|
struct Result
|
||
|
{
|
||
|
#line 31 "./src/util/binder.lzz"
|
||
|
int count;
|
||
|
#line 32 "./src/util/binder.lzz"
|
||
|
bool bound_object;
|
||
|
};
|
||
|
#line 55 "./src/util/binder.lzz"
|
||
|
void Fail (void (* Throw) (char const *), char const * message);
|
||
|
#line 63 "./src/util/binder.lzz"
|
||
|
int NextAnonIndex ();
|
||
|
#line 69 "./src/util/binder.lzz"
|
||
|
void BindValue (v8::Isolate * isolate, v8::Local <v8::Value> value, int index);
|
||
|
#line 90 "./src/util/binder.lzz"
|
||
|
int BindArray (v8::Isolate * isolate, v8::Local <v8::Array> arr);
|
||
|
#line 116 "./src/util/binder.lzz"
|
||
|
int BindObject (v8::Isolate * isolate, v8::Local <v8::Object> obj, Statement * stmt);
|
||
|
#line 160 "./src/util/binder.lzz"
|
||
|
Result BindArgs (v8::FunctionCallbackInfo <v8 :: Value> const & info, int argc, Statement * stmt);
|
||
|
#line 200 "./src/util/binder.lzz"
|
||
|
sqlite3_stmt * handle;
|
||
|
#line 201 "./src/util/binder.lzz"
|
||
|
int param_count;
|
||
|
#line 202 "./src/util/binder.lzz"
|
||
|
int anon_index;
|
||
|
#line 203 "./src/util/binder.lzz"
|
||
|
bool success;
|
||
|
};
|
||
|
#line 34 "./src/better_sqlite3.lzz"
|
||
|
struct Addon
|
||
|
{
|
||
|
#line 35 "./src/better_sqlite3.lzz"
|
||
|
static void JS_setErrorConstructor (v8::FunctionCallbackInfo <v8 :: Value> const & info);
|
||
|
#line 40 "./src/better_sqlite3.lzz"
|
||
|
static void Cleanup (void * ptr);
|
||
|
#line 47 "./src/better_sqlite3.lzz"
|
||
|
explicit Addon (v8::Isolate * isolate);
|
||
|
#line 52 "./src/better_sqlite3.lzz"
|
||
|
sqlite3_uint64 NextId ();
|
||
|
#line 56 "./src/better_sqlite3.lzz"
|
||
|
CopyablePersistent <v8::Function> Statement;
|
||
|
#line 57 "./src/better_sqlite3.lzz"
|
||
|
CopyablePersistent <v8::Function> StatementIterator;
|
||
|
#line 58 "./src/better_sqlite3.lzz"
|
||
|
CopyablePersistent <v8::Function> Backup;
|
||
|
#line 59 "./src/better_sqlite3.lzz"
|
||
|
CopyablePersistent <v8::Function> SqliteError;
|
||
|
#line 60 "./src/better_sqlite3.lzz"
|
||
|
v8::FunctionCallbackInfo <v8 :: Value> const * privileged_info;
|
||
|
#line 61 "./src/better_sqlite3.lzz"
|
||
|
sqlite3_uint64 next_id;
|
||
|
#line 62 "./src/better_sqlite3.lzz"
|
||
|
CS cs;
|
||
|
#line 63 "./src/better_sqlite3.lzz"
|
||
|
std::set <Database*, Database::CompareDatabase> dbs;
|
||
|
};
|
||
|
#line 16 "./src/util/macros.lzz"
|
||
|
LZZ_INLINE v8::Local <v8::String> StringFromUtf8 (v8::Isolate * isolate, char const * data, int length)
|
||
|
#line 16 "./src/util/macros.lzz"
|
||
|
{
|
||
|
return v8::String::NewFromUtf8(isolate, data, v8::NewStringType::kNormal, length).ToLocalChecked();
|
||
|
}
|
||
|
#line 19 "./src/util/macros.lzz"
|
||
|
LZZ_INLINE v8::Local <v8::String> InternalizedFromUtf8 (v8::Isolate * isolate, char const * data, int length)
|
||
|
#line 19 "./src/util/macros.lzz"
|
||
|
{
|
||
|
return v8::String::NewFromUtf8(isolate, data, v8::NewStringType::kInternalized, length).ToLocalChecked();
|
||
|
}
|
||
|
#line 22 "./src/util/macros.lzz"
|
||
|
LZZ_INLINE v8::Local <v8::Value> InternalizedFromUtf8OrNull (v8::Isolate * isolate, char const * data, int length)
|
||
|
#line 22 "./src/util/macros.lzz"
|
||
|
{
|
||
|
if (data == NULL) return v8::Null(isolate);
|
||
|
return InternalizedFromUtf8(isolate, data, length);
|
||
|
}
|
||
|
#line 26 "./src/util/macros.lzz"
|
||
|
LZZ_INLINE v8::Local <v8::String> InternalizedFromLatin1 (v8::Isolate * isolate, char const * str)
|
||
|
#line 26 "./src/util/macros.lzz"
|
||
|
{
|
||
|
return v8::String::NewFromOneByte(isolate, reinterpret_cast<const uint8_t*>(str), v8::NewStringType::kInternalized).ToLocalChecked();
|
||
|
}
|
||
|
#line 33 "./src/util/macros.lzz"
|
||
|
LZZ_INLINE void SetFrozen (v8::Isolate * isolate, v8::Local <v8::Context> ctx, v8::Local <v8::Object> obj, CopyablePersistent <v8::String> & key, v8::Local <v8::Value> value)
|
||
|
#line 33 "./src/util/macros.lzz"
|
||
|
{
|
||
|
obj->DefineOwnProperty(ctx, key.Get(isolate), value, static_cast<v8::PropertyAttribute>(v8::DontDelete | v8::ReadOnly)).FromJust();
|
||
|
}
|
||
|
#line 91 "./src/util/macros.lzz"
|
||
|
LZZ_INLINE bool IS_SKIPPED (char c)
|
||
|
#line 91 "./src/util/macros.lzz"
|
||
|
{
|
||
|
return c == ' ' || c == ';' || (c >= '\t' && c <= '\r');
|
||
|
}
|
||
|
#line 96 "./src/util/macros.lzz"
|
||
|
template <typename T>
|
||
|
#line 96 "./src/util/macros.lzz"
|
||
|
LZZ_INLINE T * ALLOC_ARRAY (size_t count)
|
||
|
#line 96 "./src/util/macros.lzz"
|
||
|
{
|
||
|
return static_cast<T*>(::operator new[](count * sizeof(T)));
|
||
|
}
|
||
|
#line 101 "./src/util/macros.lzz"
|
||
|
template <typename T>
|
||
|
#line 101 "./src/util/macros.lzz"
|
||
|
LZZ_INLINE void FREE_ARRAY (T * array_pointer)
|
||
|
#line 101 "./src/util/macros.lzz"
|
||
|
{
|
||
|
::operator delete[](array_pointer);
|
||
|
}
|
||
|
#line 9 "./src/util/bind-map.lzz"
|
||
|
LZZ_INLINE int BindMap::Pair::GetIndex ()
|
||
|
#line 9 "./src/util/bind-map.lzz"
|
||
|
{
|
||
|
return index;
|
||
|
}
|
||
|
#line 13 "./src/util/bind-map.lzz"
|
||
|
LZZ_INLINE v8::Local <v8::String> BindMap::Pair::GetName (v8::Isolate * isolate)
|
||
|
#line 13 "./src/util/bind-map.lzz"
|
||
|
{
|
||
|
return name.Get(isolate);
|
||
|
}
|
||
|
#line 41 "./src/util/bind-map.lzz"
|
||
|
LZZ_INLINE BindMap::Pair * BindMap::GetPairs ()
|
||
|
#line 41 "./src/util/bind-map.lzz"
|
||
|
{
|
||
|
return pairs;
|
||
|
}
|
||
|
#line 45 "./src/util/bind-map.lzz"
|
||
|
LZZ_INLINE int BindMap::GetSize ()
|
||
|
#line 45 "./src/util/bind-map.lzz"
|
||
|
{
|
||
|
return length;
|
||
|
}
|
||
|
#line 77 "./src/objects/database.lzz"
|
||
|
LZZ_INLINE void Database::AddStatement (Statement * stmt)
|
||
|
#line 77 "./src/objects/database.lzz"
|
||
|
{ stmts.insert(stmts.end(), stmt);
|
||
|
}
|
||
|
#line 78 "./src/objects/database.lzz"
|
||
|
LZZ_INLINE void Database::RemoveStatement (Statement * stmt)
|
||
|
#line 78 "./src/objects/database.lzz"
|
||
|
{ stmts.erase(stmt);
|
||
|
}
|
||
|
#line 81 "./src/objects/database.lzz"
|
||
|
LZZ_INLINE void Database::AddBackup (Backup * backup)
|
||
|
#line 81 "./src/objects/database.lzz"
|
||
|
{ backups.insert(backups.end(), backup);
|
||
|
}
|
||
|
#line 82 "./src/objects/database.lzz"
|
||
|
LZZ_INLINE void Database::RemoveBackup (Backup * backup)
|
||
|
#line 82 "./src/objects/database.lzz"
|
||
|
{ backups.erase(backup);
|
||
|
}
|
||
|
#line 96 "./src/objects/database.lzz"
|
||
|
LZZ_INLINE Database::State * Database::GetState ()
|
||
|
#line 96 "./src/objects/database.lzz"
|
||
|
{
|
||
|
return reinterpret_cast<State*>(&open);
|
||
|
}
|
||
|
#line 99 "./src/objects/database.lzz"
|
||
|
LZZ_INLINE sqlite3 * Database::GetHandle ()
|
||
|
#line 99 "./src/objects/database.lzz"
|
||
|
{
|
||
|
return db_handle;
|
||
|
}
|
||
|
#line 102 "./src/objects/database.lzz"
|
||
|
LZZ_INLINE Addon * Database::GetAddon ()
|
||
|
#line 102 "./src/objects/database.lzz"
|
||
|
{
|
||
|
return addon;
|
||
|
}
|
||
|
#line 21 "./src/objects/statement.lzz"
|
||
|
LZZ_INLINE bool Statement::Compare (Statement const * const a, Statement const * const b)
|
||
|
#line 21 "./src/objects/statement.lzz"
|
||
|
{
|
||
|
return a->extras->id < b->extras->id;
|
||
|
}
|
||
|
#line 119 "./src/objects/statement-iterator.lzz"
|
||
|
LZZ_INLINE v8::Local <v8::Object> StatementIterator::NewRecord (v8::Isolate * isolate, v8::Local <v8::Context> ctx, v8::Local <v8::Value> value, Addon * addon, bool done)
|
||
|
#line 119 "./src/objects/statement-iterator.lzz"
|
||
|
{
|
||
|
v8::Local<v8::Object> record = v8::Object::New(isolate);
|
||
|
record->Set(ctx, addon->cs.value.Get(isolate), value).FromJust();
|
||
|
record->Set(ctx, addon->cs.done.Get(isolate), v8::Boolean::New(isolate, done)).FromJust();
|
||
|
return record;
|
||
|
}
|
||
|
#line 126 "./src/objects/statement-iterator.lzz"
|
||
|
LZZ_INLINE v8::Local <v8::Object> StatementIterator::DoneRecord (v8::Isolate * isolate, Addon * addon)
|
||
|
#line 126 "./src/objects/statement-iterator.lzz"
|
||
|
{
|
||
|
return NewRecord(isolate, isolate -> GetCurrentContext ( ) , v8::Undefined(isolate), addon, true);
|
||
|
}
|
||
|
#line 12 "./src/objects/backup.lzz"
|
||
|
LZZ_INLINE bool Backup::Compare (Backup const * const a, Backup const * const b)
|
||
|
#line 12 "./src/objects/backup.lzz"
|
||
|
{
|
||
|
return a->id < b->id;
|
||
|
}
|
||
|
#line 39 "./src/util/custom-aggregate.lzz"
|
||
|
LZZ_INLINE void CustomAggregate::xStepBase (sqlite3_context * invocation, int argc, sqlite3_value * * argv, CopyablePersistent <v8::Function> const CustomAggregate::* ptrtm)
|
||
|
#line 39 "./src/util/custom-aggregate.lzz"
|
||
|
{
|
||
|
CustomAggregate * self = static_cast < CustomAggregate * > ( sqlite3_user_data ( invocation ) ) ; v8 :: Isolate * isolate = self -> isolate ; v8 :: HandleScope scope ( isolate ) ; Accumulator * acc = self -> GetAccumulator ( invocation ) ; if ( acc -> value . IsEmpty ( ) ) return ;
|
||
|
|
||
|
v8::Local<v8::Value> args_fast[5];
|
||
|
v8::Local<v8::Value>* args = argc <= 4 ? args_fast : ALLOC_ARRAY<v8::Local<v8::Value>>(argc + 1);
|
||
|
args[0] = acc->value.Get(isolate);
|
||
|
if (argc != 0) Data::GetArgumentsJS(isolate, args + 1, argv, argc, self->safe_ints);
|
||
|
|
||
|
v8::MaybeLocal<v8::Value> maybeReturnValue = (self->*ptrtm).Get(isolate)->Call( isolate -> GetCurrentContext ( ) , v8::Undefined(isolate), argc + 1, args);
|
||
|
if (args != args_fast) delete[] args;
|
||
|
|
||
|
if (maybeReturnValue.IsEmpty()) {
|
||
|
self->PropagateJSError(invocation);
|
||
|
} else {
|
||
|
v8::Local<v8::Value> returnValue = maybeReturnValue.ToLocalChecked();
|
||
|
if (!returnValue->IsUndefined()) acc->value.Reset(isolate, returnValue);
|
||
|
}
|
||
|
}
|
||
|
#line 58 "./src/util/custom-aggregate.lzz"
|
||
|
LZZ_INLINE void CustomAggregate::xValueBase (sqlite3_context * invocation, bool is_final)
|
||
|
#line 58 "./src/util/custom-aggregate.lzz"
|
||
|
{
|
||
|
CustomAggregate * self = static_cast < CustomAggregate * > ( sqlite3_user_data ( invocation ) ) ; v8 :: Isolate * isolate = self -> isolate ; v8 :: HandleScope scope ( isolate ) ; Accumulator * acc = self -> GetAccumulator ( invocation ) ; if ( acc -> value . IsEmpty ( ) ) return ;
|
||
|
|
||
|
if (!is_final) {
|
||
|
acc->is_window = true;
|
||
|
} else if (acc->is_window) {
|
||
|
DestroyAccumulator(invocation);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
v8::Local<v8::Value> result = acc->value.Get(isolate);
|
||
|
if (self->invoke_result) {
|
||
|
v8::MaybeLocal<v8::Value> maybeResult = self->result.Get(isolate)->Call( isolate -> GetCurrentContext ( ) , v8::Undefined(isolate), 1, &result);
|
||
|
if (maybeResult.IsEmpty()) {
|
||
|
self->PropagateJSError(invocation);
|
||
|
return;
|
||
|
}
|
||
|
result = maybeResult.ToLocalChecked();
|
||
|
}
|
||
|
|
||
|
Data::ResultValueFromJS(isolate, invocation, result, self);
|
||
|
if (is_final) DestroyAccumulator(invocation);
|
||
|
}
|
||
|
#line 92 "./src/util/custom-table.lzz"
|
||
|
LZZ_INLINE CustomTable::VTab * CustomTable::VTab::Upcast (sqlite3_vtab * vtab)
|
||
|
#line 92 "./src/util/custom-table.lzz"
|
||
|
{
|
||
|
return reinterpret_cast<VTab*>(vtab);
|
||
|
}
|
||
|
#line 96 "./src/util/custom-table.lzz"
|
||
|
LZZ_INLINE sqlite3_vtab * CustomTable::VTab::Downcast ()
|
||
|
#line 96 "./src/util/custom-table.lzz"
|
||
|
{
|
||
|
return reinterpret_cast<sqlite3_vtab*>(this);
|
||
|
}
|
||
|
#line 110 "./src/util/custom-table.lzz"
|
||
|
LZZ_INLINE CustomTable::Cursor * CustomTable::Cursor::Upcast (sqlite3_vtab_cursor * cursor)
|
||
|
#line 110 "./src/util/custom-table.lzz"
|
||
|
{
|
||
|
return reinterpret_cast<Cursor*>(cursor);
|
||
|
}
|
||
|
#line 114 "./src/util/custom-table.lzz"
|
||
|
LZZ_INLINE sqlite3_vtab_cursor * CustomTable::Cursor::Downcast ()
|
||
|
#line 114 "./src/util/custom-table.lzz"
|
||
|
{
|
||
|
return reinterpret_cast<sqlite3_vtab_cursor*>(this);
|
||
|
}
|
||
|
#line 118 "./src/util/custom-table.lzz"
|
||
|
LZZ_INLINE CustomTable::VTab * CustomTable::Cursor::GetVTab ()
|
||
|
#line 118 "./src/util/custom-table.lzz"
|
||
|
{
|
||
|
return VTab::Upcast(base.pVtab);
|
||
|
}
|
||
|
#line 52 "./src/better_sqlite3.lzz"
|
||
|
LZZ_INLINE sqlite3_uint64 Addon::NextId ()
|
||
|
#line 52 "./src/better_sqlite3.lzz"
|
||
|
{
|
||
|
return next_id++;
|
||
|
}
|
||
|
#undef LZZ_INLINE
|
||
|
#endif
|