gqlite 0.9 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/gqlite/extconf.rb +2 -0
- data/ext/gqlite/gqlite-amalgamate.cpp +5759 -3543
- data/ext/gqlite/gqlite-c.h +5 -0
- data/ext/gqlite/gqlite.h +18 -29
- data/lib/gqlite.rb +28 -10
- metadata +27 -12
data/ext/gqlite/gqlite-c.h
CHANGED
@@ -80,6 +80,11 @@ void gqlite_value_destroy(gqlite_api_context_t, gqlite_value_t);
|
|
80
80
|
*/
|
81
81
|
const char* gqlite_value_to_json(gqlite_api_context_t, gqlite_value_t);
|
82
82
|
|
83
|
+
/**
|
84
|
+
* Create value from json.
|
85
|
+
*/
|
86
|
+
gqlite_value_t gqlite_value_from_json(gqlite_api_context_t, const char*);
|
87
|
+
|
83
88
|
/**
|
84
89
|
* Check if the value is valid.
|
85
90
|
*/
|
data/ext/gqlite/gqlite.h
CHANGED
@@ -10,44 +10,35 @@ namespace gqlite
|
|
10
10
|
{
|
11
11
|
class backend;
|
12
12
|
struct debug_stats;
|
13
|
+
enum class exception_stage;
|
14
|
+
enum class exception_code;
|
15
|
+
struct exception_maker;
|
16
|
+
struct exception_reader;
|
13
17
|
/**
|
14
18
|
* Represents an error that occurs during the execution of a query.
|
15
19
|
*/
|
16
20
|
class exception : public std::exception
|
17
21
|
{
|
22
|
+
friend class exception_maker;
|
23
|
+
friend class exception_reader;
|
18
24
|
public:
|
19
|
-
exception(
|
20
|
-
exception(const char* _error) : m_c_error(_error) {}
|
21
|
-
template<typename _T_, typename... _TOther_>
|
22
|
-
inline exception(const char* _format, const _T_& _value, const _TOther_&... _other);
|
23
|
-
template<typename _T_, typename... _TOther_>
|
24
|
-
inline exception(const std::string& _format, const _T_& _value, const _TOther_&... _other);
|
25
|
+
exception(exception&& _rhs);
|
25
26
|
exception(const exception& _rhs);
|
26
27
|
exception& operator=(const exception& _rhs);
|
28
|
+
~exception();
|
27
29
|
/**
|
28
30
|
* @return the error message
|
29
31
|
*/
|
30
|
-
const char* what() const throw() override
|
31
|
-
{
|
32
|
-
return m_c_error;
|
33
|
-
}
|
32
|
+
const char* what() const throw() override;
|
34
33
|
private:
|
35
|
-
|
36
|
-
|
34
|
+
struct data;
|
35
|
+
exception(data* _d);
|
36
|
+
data* const d;
|
37
37
|
};
|
38
38
|
/**
|
39
39
|
* Represent the value type.
|
40
40
|
*/
|
41
|
-
enum class value_type
|
42
|
-
{
|
43
|
-
invalid,
|
44
|
-
boolean,
|
45
|
-
integer,
|
46
|
-
number, ///< aka float
|
47
|
-
string,
|
48
|
-
map,
|
49
|
-
vector
|
50
|
-
};
|
41
|
+
enum class value_type;
|
51
42
|
class value;
|
52
43
|
using value_map = std::unordered_map<std::string, value>;
|
53
44
|
using value_vector = std::vector<value>;
|
@@ -62,8 +53,10 @@ namespace gqlite
|
|
62
53
|
value& operator=(const value& _rhs);
|
63
54
|
~value();
|
64
55
|
public:
|
65
|
-
value(
|
56
|
+
value(bool _v);
|
57
|
+
value(int64_t _v);
|
66
58
|
value(double _v);
|
59
|
+
value(const char* _v);
|
67
60
|
value(const std::string& _v);
|
68
61
|
value(const value_map& _v);
|
69
62
|
/// not part of the public API
|
@@ -74,6 +67,7 @@ namespace gqlite
|
|
74
67
|
template<typename _T_>
|
75
68
|
value(const std::vector<_T_>& _v);
|
76
69
|
bool operator==(const value& _rhs) const;
|
70
|
+
bool operator<(const value& _rhs) const;
|
77
71
|
public:
|
78
72
|
/**
|
79
73
|
* @return the type hold by this value
|
@@ -86,7 +80,7 @@ namespace gqlite
|
|
86
80
|
/**
|
87
81
|
* Attempt to return an integer. Throw an exception if not possible.
|
88
82
|
*/
|
89
|
-
|
83
|
+
int64_t to_integer() const;
|
90
84
|
/**
|
91
85
|
* Attempt to return a double. Throw an exception if not possible.
|
92
86
|
*/
|
@@ -135,11 +129,6 @@ namespace gqlite
|
|
135
129
|
* Create a sqlite connection from a file.
|
136
130
|
*/
|
137
131
|
static connection create_from_sqlite_file(const std::string& _filename, const value& _options = value());
|
138
|
-
/**
|
139
|
-
* @internal
|
140
|
-
* Part of the private API, what is returned by this function may change at any time.
|
141
|
-
*/
|
142
|
-
gqlite::value get_debug_stats() const;
|
143
132
|
public:
|
144
133
|
/**
|
145
134
|
* Execute a query.
|
data/lib/gqlite.rb
CHANGED
@@ -2,12 +2,22 @@ require 'ffi'
|
|
2
2
|
require 'objspace'
|
3
3
|
require 'json'
|
4
4
|
|
5
|
-
module
|
5
|
+
module GQLite
|
6
6
|
class Error < StandardError
|
7
7
|
end
|
8
8
|
module CApi
|
9
9
|
extend FFI::Library
|
10
|
-
|
10
|
+
|
11
|
+
# Attempt to find the gqlite build that is shipped with gem
|
12
|
+
def CApi.get_lib_name()
|
13
|
+
path = "#{File.dirname __FILE__}/#{FFI::Platform::LIBPREFIX}gqlite.#{FFI::Platform::LIBSUFFIX}"
|
14
|
+
return path if File.exist?(path)
|
15
|
+
path = "#{File.dirname __FILE__}/gqlite.#{FFI::Platform::LIBSUFFIX}"
|
16
|
+
return path if File.exist?(path)
|
17
|
+
return "gqlite"
|
18
|
+
end
|
19
|
+
|
20
|
+
ffi_lib CApi.get_lib_name()
|
11
21
|
attach_function :gqlite_api_context_create, [], :pointer
|
12
22
|
attach_function :gqlite_api_context_destroy, [:pointer], :void
|
13
23
|
attach_function :gqlite_api_context_clear_error, [:pointer], :void
|
@@ -19,13 +29,14 @@ module Gqlite
|
|
19
29
|
attach_function :gqlite_value_create, [:pointer], :pointer
|
20
30
|
attach_function :gqlite_value_destroy, [:pointer, :pointer], :void
|
21
31
|
attach_function :gqlite_value_to_json, [:pointer, :pointer], :string
|
32
|
+
attach_function :gqlite_value_from_json, [:pointer, :string], :pointer
|
22
33
|
attach_function :gqlite_value_is_valid, [:pointer, :pointer], :bool
|
23
|
-
|
34
|
+
ApiContext = CApi.gqlite_api_context_create()
|
24
35
|
def CApi.call_function(fname, *args)
|
25
|
-
r = CApi.send fname,
|
26
|
-
if CApi.gqlite_api_context_has_error(
|
27
|
-
err = CApi.gqlite_api_context_get_message
|
28
|
-
CApi.gqlite_api_context_clear_error
|
36
|
+
r = CApi.send fname, ApiContext, *args
|
37
|
+
if CApi.gqlite_api_context_has_error(ApiContext)
|
38
|
+
err = CApi.gqlite_api_context_get_message ApiContext
|
39
|
+
CApi.gqlite_api_context_clear_error ApiContext
|
29
40
|
raise Error.new err
|
30
41
|
end
|
31
42
|
return r
|
@@ -44,11 +55,18 @@ module Gqlite
|
|
44
55
|
}
|
45
56
|
end
|
46
57
|
def execute_oc_query(query, bindings: nil)
|
47
|
-
|
58
|
+
b = nil
|
59
|
+
if bindings
|
60
|
+
b = CApi.call_function :gqlite_value_from_json, bindings.to_json
|
61
|
+
end
|
62
|
+
ret = CApi.call_function :gqlite_connection_oc_query, @dbhandle, query, b
|
63
|
+
if b
|
64
|
+
CApi.call_function :gqlite_value_destroy, b
|
65
|
+
end
|
48
66
|
if CApi.call_function(:gqlite_value_is_valid, ret)
|
49
|
-
val = JSON.parse
|
67
|
+
val = JSON.parse(CApi.call_function :gqlite_value_to_json, ret)
|
50
68
|
else
|
51
|
-
|
69
|
+
val = nil
|
52
70
|
end
|
53
71
|
CApi.call_function :gqlite_value_destroy, ret
|
54
72
|
return val
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gqlite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cyrille Berger
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-11-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -24,11 +24,26 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.15'
|
27
|
-
description:
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
27
|
+
description: "GQLite is a C++-language library, with a C interface, that implements
|
28
|
+
a small, fast, self-contained, high-reliability, full-featured, Graph Query database
|
29
|
+
engine. The data is stored in a SQLite database, which the fasted and most used
|
30
|
+
SQL database. This enable to achieve high performance and for application to combine
|
31
|
+
Graph queries with traditional SQL queries.\n\nGQLite source code is license under
|
32
|
+
the [MIT License](LICENSE) and is free to everyone to use for any purpose. \n\nThe
|
33
|
+
official repositories contains bindings/APIs for C, C++, Python, Ruby and Crystal.\n\nThe
|
34
|
+
library is still in its early stage, but it is now fully functional. Development
|
35
|
+
effort has now slowed down and new features are added on a by-need basis. It supports
|
36
|
+
a subset of [OpenCypher](https://opencypher.org/), and the intent is to also support
|
37
|
+
ISO GQL in the future when it become available.\n \nExample of use\n--------------\n\n```ruby\nrequire
|
38
|
+
'gqlite'\n\nbegin\n # Create a database on the file \"test.db\"\n connection =
|
39
|
+
GQLite::Connection.new sqlite_filename: \"test.db\"\n\n # Execute a simple query
|
40
|
+
to create a node and return all the nodes\n value = connection.execute_oc_query(\"CREATE
|
41
|
+
() MATCH (n) RETURN n\")\n\n # Print the result\n if value.nil?\n puts \"Empty
|
42
|
+
results\"\n else\n puts \"Results are #{value.to_s}\"\n end\nrescue GQLite::Error
|
43
|
+
=> ex\n # Report any error\n puts \"An error has occured: #{ex.message}\"\nend\n\n```\n\nThe
|
44
|
+
documentation for the openCypher query language can found in [openCypher](https://gitlab.com/gqlite/GQLite/-/blob/docs/opencypher.md)
|
45
|
+
and for the [API](https://gitlab.com/gqlite/GQLite/-/blob/docs/api.md).\n\n"
|
46
|
+
email:
|
32
47
|
executables: []
|
33
48
|
extensions:
|
34
49
|
- ext/gqlite/extconf.rb
|
@@ -39,11 +54,11 @@ files:
|
|
39
54
|
- ext/gqlite/gqlite-c.h
|
40
55
|
- ext/gqlite/gqlite.h
|
41
56
|
- lib/gqlite.rb
|
42
|
-
homepage: https://gitlab.com/
|
57
|
+
homepage: https://gitlab.com/gqlite/gqlite
|
43
58
|
licenses:
|
44
59
|
- MIT
|
45
60
|
metadata: {}
|
46
|
-
post_install_message:
|
61
|
+
post_install_message:
|
47
62
|
rdoc_options: []
|
48
63
|
require_paths:
|
49
64
|
- lib
|
@@ -58,8 +73,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
58
73
|
- !ruby/object:Gem::Version
|
59
74
|
version: '0'
|
60
75
|
requirements: []
|
61
|
-
rubygems_version: 3.
|
62
|
-
signing_key:
|
76
|
+
rubygems_version: 3.4.20
|
77
|
+
signing_key:
|
63
78
|
specification_version: 4
|
64
79
|
summary: Ruby bindings for GQLite, a Graph Query library.
|
65
80
|
test_files: []
|