sqlite3-ruby 1.2.5-x86-mswin32
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.
- data/ChangeLog.cvs +88 -0
- data/History.txt +68 -0
- data/LICENSE +27 -0
- data/Manifest.txt +41 -0
- data/README.txt +56 -0
- data/Rakefile +5 -0
- data/ext/sqlite3_api/extconf.rb +10 -0
- data/ext/sqlite3_api/sqlite3_api.i +362 -0
- data/ext/sqlite3_api/sqlite3_api_wrap.c +5018 -0
- data/faq/faq.rb +145 -0
- data/faq/faq.yml +426 -0
- data/lib/1.8/sqlite3_api.so +0 -0
- data/lib/1.9/sqlite3_api.so +0 -0
- data/lib/sqlite3.rb +1 -0
- data/lib/sqlite3/constants.rb +49 -0
- data/lib/sqlite3/database.rb +721 -0
- data/lib/sqlite3/driver/dl/api.rb +152 -0
- data/lib/sqlite3/driver/dl/driver.rb +307 -0
- data/lib/sqlite3/driver/native/driver.rb +219 -0
- data/lib/sqlite3/errors.rb +68 -0
- data/lib/sqlite3/pragmas.rb +271 -0
- data/lib/sqlite3/resultset.rb +180 -0
- data/lib/sqlite3/statement.rb +231 -0
- data/lib/sqlite3/translator.rb +109 -0
- data/lib/sqlite3/value.rb +57 -0
- data/lib/sqlite3/version.rb +16 -0
- data/setup.rb +1333 -0
- data/tasks/benchmark.rake +9 -0
- data/tasks/faq.rake +9 -0
- data/tasks/gem.rake +32 -0
- data/tasks/native.rake +35 -0
- data/tasks/vendor_sqlite3.rake +104 -0
- data/test/bm.rb +140 -0
- data/test/driver/dl/tc_driver.rb +292 -0
- data/test/helper.rb +67 -0
- data/test/native-vs-dl.rb +126 -0
- data/test/test_database.rb +217 -0
- data/test/test_errors.rb +17 -0
- data/test/test_integration.rb +542 -0
- data/test/test_integration_open_close.rb +30 -0
- data/test/test_integration_pending.rb +111 -0
- data/test/test_integration_resultset.rb +159 -0
- data/test/test_integration_statement.rb +195 -0
- metadata +143 -0
data/ChangeLog.cvs
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
2005-01-05 09:40 minam
|
2
|
+
|
3
|
+
* Rakefile, sqlite3-ruby-win32.gemspec, sqlite3-ruby.gemspec: Added
|
4
|
+
win32 gem.
|
5
|
+
|
6
|
+
2005-01-05 07:31 minam
|
7
|
+
|
8
|
+
* Rakefile, test/tc_integration.rb, test/tests.rb: Added
|
9
|
+
native-vs-dl benchmark to Rakefile. Added SQLITE3_DRIVERS
|
10
|
+
environment variable to integration test to specify which
|
11
|
+
driver(s) should be tested (defaults to "Native").
|
12
|
+
|
13
|
+
2005-01-04 14:26 minam
|
14
|
+
|
15
|
+
* ext/sqlite3_api/sqlite3_api.i, lib/sqlite3/database.rb,
|
16
|
+
lib/sqlite3/driver/native/driver.rb, test/tc_database.rb,
|
17
|
+
test/tc_integration.rb, test/tests.rb: Unit tests: done. Bugs:
|
18
|
+
fixed.
|
19
|
+
|
20
|
+
2005-01-03 23:13 minam
|
21
|
+
|
22
|
+
* ext/sqlite3_api/sqlite3_api.i, lib/sqlite3/database.rb,
|
23
|
+
lib/sqlite3/driver/dl/driver.rb,
|
24
|
+
lib/sqlite3/driver/native/driver.rb, test/tc_integration.rb:
|
25
|
+
Custom functions (aggregate and otherwise) are supported by the
|
26
|
+
native driver now. Test cases for the same.
|
27
|
+
|
28
|
+
2005-01-03 13:51 minam
|
29
|
+
|
30
|
+
* ext/sqlite3_api/MANIFEST, ext/sqlite3_api/extconf.rb,
|
31
|
+
ext/sqlite3_api/post-clean.rb, ext/sqlite3_api/post-distclean.rb,
|
32
|
+
ext/sqlite3_api/sqlite3_api.i, lib/sqlite3/database.rb,
|
33
|
+
lib/sqlite3/resultset.rb, lib/sqlite3/version.rb,
|
34
|
+
lib/sqlite3/driver/dl/driver.rb,
|
35
|
+
lib/sqlite3/driver/native/driver.rb, test/native-vs-dl.rb,
|
36
|
+
test/tc_integration.rb: Added preliminary implementation of
|
37
|
+
native driver (swig-based), and integration tests.
|
38
|
+
|
39
|
+
2004-12-29 19:37 minam
|
40
|
+
|
41
|
+
* lib/sqlite3/driver/dl/driver.rb: Some fixes to allow the DL
|
42
|
+
driver to work with Ruby 1.8.1.
|
43
|
+
|
44
|
+
2004-12-29 14:52 minam
|
45
|
+
|
46
|
+
* lib/sqlite3/: database.rb, version.rb: Made #quote a class method
|
47
|
+
(again). Bumped version to 0.6.
|
48
|
+
|
49
|
+
2004-12-25 22:59 minam
|
50
|
+
|
51
|
+
* lib/sqlite3/driver/dl/api.rb: Added check for darwin in supported
|
52
|
+
platforms (thanks to bitsweat).
|
53
|
+
|
54
|
+
2004-12-22 12:38 minam
|
55
|
+
|
56
|
+
* Rakefile: Rakefile wasn't packaging the README file.
|
57
|
+
|
58
|
+
2004-12-21 22:28 minam
|
59
|
+
|
60
|
+
* Rakefile, sqlite3-ruby.gemspec, test/bm.rb: Packaging now works.
|
61
|
+
Added benchmarks.
|
62
|
+
|
63
|
+
2004-12-21 21:45 minam
|
64
|
+
|
65
|
+
* LICENSE, README, Rakefile, setup.rb, sqlite3-ruby.gemspec,
|
66
|
+
doc/faq/faq.rb, doc/faq/faq.yml, lib/sqlite3.rb,
|
67
|
+
lib/sqlite3/statement.rb, lib/sqlite3/constants.rb,
|
68
|
+
lib/sqlite3/database.rb, lib/sqlite3/resultset.rb,
|
69
|
+
lib/sqlite3/translator.rb, lib/sqlite3/value.rb,
|
70
|
+
lib/sqlite3/version.rb, lib/sqlite3/errors.rb,
|
71
|
+
lib/sqlite3/pragmas.rb, lib/sqlite3/driver/dl/api.rb,
|
72
|
+
lib/sqlite3/driver/dl/driver.rb, test/mocks.rb,
|
73
|
+
test/tc_database.rb, test/tests.rb, test/driver/dl/tc_driver.rb:
|
74
|
+
Initial import
|
75
|
+
|
76
|
+
2004-12-21 21:45 minam
|
77
|
+
|
78
|
+
* LICENSE, README, Rakefile, setup.rb, sqlite3-ruby.gemspec,
|
79
|
+
doc/faq/faq.rb, doc/faq/faq.yml, lib/sqlite3.rb,
|
80
|
+
lib/sqlite3/statement.rb, lib/sqlite3/constants.rb,
|
81
|
+
lib/sqlite3/database.rb, lib/sqlite3/resultset.rb,
|
82
|
+
lib/sqlite3/translator.rb, lib/sqlite3/value.rb,
|
83
|
+
lib/sqlite3/version.rb, lib/sqlite3/errors.rb,
|
84
|
+
lib/sqlite3/pragmas.rb, lib/sqlite3/driver/dl/api.rb,
|
85
|
+
lib/sqlite3/driver/dl/driver.rb, test/mocks.rb,
|
86
|
+
test/tc_database.rb, test/tests.rb, test/driver/dl/tc_driver.rb:
|
87
|
+
Initial revision
|
88
|
+
|
data/History.txt
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
=== 1.2.5 / 25 Jul 2009
|
2
|
+
|
3
|
+
* Check for illegal nil before executing SQL [Erik Veenstra]
|
4
|
+
* Switch to Hoe for gem task management and packaging.
|
5
|
+
* Advertise rake-compiler as development dependency.
|
6
|
+
* Build gem binaries for Windows.
|
7
|
+
* Improved Ruby 1.9 support compatibility.
|
8
|
+
* Taint returned values. Patch #20325.
|
9
|
+
|
10
|
+
|
11
|
+
=== 1.2.4.1 (internal) / 5 Jul 2009
|
12
|
+
|
13
|
+
* Check for illegal nil before executing SQL [Erik Veenstra]
|
14
|
+
* Switch to Hoe for gem task management and packaging.
|
15
|
+
* Advertise rake-compiler as development dependency.
|
16
|
+
* Build gem binaries for Windows.
|
17
|
+
* Improved Ruby 1.9 support compatibility.
|
18
|
+
|
19
|
+
|
20
|
+
=== 1.2.4 / 27 Aug 2008
|
21
|
+
|
22
|
+
* Package the updated C file for source builds. [Jamis Buck]
|
23
|
+
|
24
|
+
|
25
|
+
=== 1.2.3 / 26 Aug 2008
|
26
|
+
|
27
|
+
* Fix incorrect permissions on database.rb and translator.rb [Various]
|
28
|
+
|
29
|
+
* Avoid using Object#extend for greater speedups [Erik Veenstra]
|
30
|
+
|
31
|
+
* Ruby 1.9 compatibility tweaks for Array#zip [jimmy88@gmail.com]
|
32
|
+
|
33
|
+
* Fix linking against Ruby 1.8.5 [Rob Holland <rob@inversepath.com>]
|
34
|
+
|
35
|
+
|
36
|
+
=== 1.2.2 / 31 May 2008
|
37
|
+
|
38
|
+
* Make the table_info method adjust the returned default value for the rows
|
39
|
+
so that the sqlite3 change in 3.3.8 and greater can be handled
|
40
|
+
transparently [Jamis Buck <jamis@37signals.com>]
|
41
|
+
|
42
|
+
* Ruby 1.9 compatibility tweaks [Roman Le Negrate <roman2k@free.fr>]
|
43
|
+
|
44
|
+
* Various performance enhancements [thanks Erik Veenstra]
|
45
|
+
|
46
|
+
* Correct busy_handler documentation [Rob Holland <rob@inversepath.com>]
|
47
|
+
|
48
|
+
* Use int_bind64 on Fixnum values larger than a 32bit C int can take. [Rob Holland <rob@inversepath.com>]
|
49
|
+
|
50
|
+
* Work around a quirk in SQLite's error reporting by calling sqlite3_reset
|
51
|
+
to produce a more informative error code upon a failure from
|
52
|
+
sqlite3_step. [Rob Holland <rob@inversepath.com>]
|
53
|
+
|
54
|
+
* Various documentation, test, and style tweaks [Rob Holland <rob@inversepath.com>]
|
55
|
+
|
56
|
+
* Be more granular with time/data translation [Rob Holland <rob@inversepath.com>]
|
57
|
+
|
58
|
+
* Use Date directly for parsing rather than going via Time [Rob Holland <rob@inversepath.com>]
|
59
|
+
|
60
|
+
* Check for the rt library and fdatasync so we link against that when
|
61
|
+
needed [Rob Holland <rob@inversepath.com>]
|
62
|
+
|
63
|
+
* Rename data structures to avoid collision on win32. based on patch
|
64
|
+
by: Luis Lavena [Rob Holland <rob@inversepath.com>]
|
65
|
+
|
66
|
+
* Add test for defaults [Daniel Rodríguez Troitiño]
|
67
|
+
|
68
|
+
* Correctly unquote double-quoted pragma defaults [Łukasz Dargiewicz <lukasz.dargiewicz@gmail.com>]
|
data/LICENSE
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
Copyright (c) 2004, Jamis Buck (jamis@jamisbuck.org)
|
2
|
+
All rights reserved.
|
3
|
+
|
4
|
+
Redistribution and use in source and binary forms, with or without
|
5
|
+
modification, are permitted provided that the following conditions are met:
|
6
|
+
|
7
|
+
* Redistributions of source code must retain the above copyright notice,
|
8
|
+
this list of conditions and the following disclaimer.
|
9
|
+
|
10
|
+
* Redistributions in binary form must reproduce the above copyright
|
11
|
+
notice, this list of conditions and the following disclaimer in the
|
12
|
+
documentation and/or other materials provided with the distribution.
|
13
|
+
|
14
|
+
* The names of its contributors may not be used to endorse or promote
|
15
|
+
products derived from this software without specific prior written
|
16
|
+
permission.
|
17
|
+
|
18
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
19
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
20
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
21
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
22
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
23
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
24
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
25
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
26
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
27
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/Manifest.txt
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
ChangeLog.cvs
|
2
|
+
History.txt
|
3
|
+
LICENSE
|
4
|
+
Manifest.txt
|
5
|
+
README.txt
|
6
|
+
Rakefile
|
7
|
+
ext/sqlite3_api/extconf.rb
|
8
|
+
ext/sqlite3_api/sqlite3_api.i
|
9
|
+
ext/sqlite3_api/sqlite3_api_wrap.c
|
10
|
+
faq/faq.rb
|
11
|
+
faq/faq.yml
|
12
|
+
lib/sqlite3.rb
|
13
|
+
lib/sqlite3/constants.rb
|
14
|
+
lib/sqlite3/database.rb
|
15
|
+
lib/sqlite3/driver/dl/api.rb
|
16
|
+
lib/sqlite3/driver/dl/driver.rb
|
17
|
+
lib/sqlite3/driver/native/driver.rb
|
18
|
+
lib/sqlite3/errors.rb
|
19
|
+
lib/sqlite3/pragmas.rb
|
20
|
+
lib/sqlite3/resultset.rb
|
21
|
+
lib/sqlite3/statement.rb
|
22
|
+
lib/sqlite3/translator.rb
|
23
|
+
lib/sqlite3/value.rb
|
24
|
+
lib/sqlite3/version.rb
|
25
|
+
setup.rb
|
26
|
+
tasks/benchmark.rake
|
27
|
+
tasks/faq.rake
|
28
|
+
tasks/gem.rake
|
29
|
+
tasks/native.rake
|
30
|
+
tasks/vendor_sqlite3.rake
|
31
|
+
test/bm.rb
|
32
|
+
test/driver/dl/tc_driver.rb
|
33
|
+
test/helper.rb
|
34
|
+
test/native-vs-dl.rb
|
35
|
+
test/test_database.rb
|
36
|
+
test/test_errors.rb
|
37
|
+
test/test_integration.rb
|
38
|
+
test/test_integration_open_close.rb
|
39
|
+
test/test_integration_pending.rb
|
40
|
+
test/test_integration_resultset.rb
|
41
|
+
test/test_integration_statement.rb
|
data/README.txt
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
= SQLite3/Ruby Interface
|
2
|
+
|
3
|
+
* http://sqlite3-ruby.rubyforge.org
|
4
|
+
* http://rubyforge.org/projects/sqlite3-ruby
|
5
|
+
* http://github.com/jamis/sqlite3-ruby
|
6
|
+
|
7
|
+
== DESCRIPTION
|
8
|
+
|
9
|
+
This module allows Ruby programs to interface with the SQLite3
|
10
|
+
database engine (http://www.sqlite.org). You must have the
|
11
|
+
SQLite engine installed in order to build this module.
|
12
|
+
|
13
|
+
Note that this module is NOT compatible with SQLite 2.x.
|
14
|
+
|
15
|
+
== Compilation and Installation
|
16
|
+
|
17
|
+
Simply do the following, after installing SQLite3:
|
18
|
+
|
19
|
+
ruby setup.rb config
|
20
|
+
ruby setup.rb setup
|
21
|
+
ruby setup.rb install
|
22
|
+
|
23
|
+
Alternatively, you can download and install the RubyGem package for
|
24
|
+
SQLite3/Ruby (you must have RubyGems and SQLite3 installed, first):
|
25
|
+
|
26
|
+
gem install sqlite3-ruby
|
27
|
+
|
28
|
+
If you have sqlite3 installed in a non-standard location, you can specify the location of the include and lib files by doing:
|
29
|
+
|
30
|
+
gem install sqlite3-ruby -- --with-sqlite3-include=/opt/local/include \
|
31
|
+
--with-sqlite3-lib=/opt/local/lib
|
32
|
+
|
33
|
+
Also, the gem ships with the C source-code pre-built, so (as of version 1.1.1)
|
34
|
+
you no longer need to have SWIG installed. However, if you have SWIG installed
|
35
|
+
and you want to generate the C file yourself, you can specify the
|
36
|
+
<code>--with-swig</code> option.
|
37
|
+
|
38
|
+
== Usage
|
39
|
+
|
40
|
+
For help figuring out the SQLite3/Ruby interface, check out the
|
41
|
+
FAQ[http://sqlite-ruby.rubyforge.org/sqlite3/faq.html]. It includes examples of
|
42
|
+
usage. If you have any questions that you feel should be address in the
|
43
|
+
FAQ, please send them to jamis@37signals.com
|
44
|
+
|
45
|
+
== Source Code
|
46
|
+
|
47
|
+
The source repository is accessible via git:
|
48
|
+
|
49
|
+
git clone git://github.com/jamis/sqlite3-ruby.git
|
50
|
+
|
51
|
+
== Contact Information
|
52
|
+
|
53
|
+
The project page is http://rubyforge.org/projects/sqlite-ruby. There, you can
|
54
|
+
find links to mailing lists and forums that you can use to discuss this
|
55
|
+
library. Additionally, there are trackers for submitting bugs and feature
|
56
|
+
requests. Feel free to use them!
|
data/Rakefile
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'mkmf'
|
2
|
+
|
3
|
+
dir_config( "sqlite3" )
|
4
|
+
|
5
|
+
have_library( "rt", "fdatasync" )
|
6
|
+
|
7
|
+
if have_header( "sqlite3.h" ) && have_library( "sqlite3", "sqlite3_open" ) then
|
8
|
+
$CFLAGS << " -fno-strict-aliasing" unless RUBY_PLATFORM =~ /mswin/
|
9
|
+
create_makefile( "sqlite3_api" )
|
10
|
+
end
|
@@ -0,0 +1,362 @@
|
|
1
|
+
%module "SQLite3::driver::native::API"
|
2
|
+
%include "typemaps.i"
|
3
|
+
%{
|
4
|
+
#include <sqlite3.h>
|
5
|
+
#include "ruby.h"
|
6
|
+
|
7
|
+
#ifndef RSTRING_PTR
|
8
|
+
#define RSTRING_PTR(s) (RSTRING(s)->ptr)
|
9
|
+
#endif
|
10
|
+
|
11
|
+
#ifndef RSTRING_LEN
|
12
|
+
#define RSTRING_LEN(s) (RSTRING(s)->len)
|
13
|
+
#endif
|
14
|
+
|
15
|
+
#ifndef STR2CSTR
|
16
|
+
#define STR2CSTR StringValueCStr
|
17
|
+
#endif
|
18
|
+
|
19
|
+
#define Init_API Init_sqlite3_api
|
20
|
+
|
21
|
+
struct CallbackData {
|
22
|
+
VALUE proc;
|
23
|
+
VALUE proc2;
|
24
|
+
VALUE data;
|
25
|
+
};
|
26
|
+
|
27
|
+
typedef struct CallbackData CallbackData;
|
28
|
+
typedef void RUBY_BLOB;
|
29
|
+
typedef void RUBY_VALBLOB;
|
30
|
+
|
31
|
+
int Sqlite3_ruby_busy_handler(void* data,int value) {
|
32
|
+
VALUE result;
|
33
|
+
CallbackData *cb = (CallbackData*)data;
|
34
|
+
result = rb_funcall(
|
35
|
+
cb->proc, rb_intern("call"), 2, cb->data, INT2FIX(value) );
|
36
|
+
return FIX2INT(result);
|
37
|
+
}
|
38
|
+
|
39
|
+
static void mark_CallbackData(void* ptr) {
|
40
|
+
CallbackData* cb = (CallbackData*)ptr;
|
41
|
+
if (cb->proc != Qnil)
|
42
|
+
rb_gc_mark(cb->proc);
|
43
|
+
if (cb->proc2 != Qnil)
|
44
|
+
rb_gc_mark(cb->proc2);
|
45
|
+
if (cb->data != Qnil)
|
46
|
+
rb_gc_mark(cb->data);
|
47
|
+
}
|
48
|
+
|
49
|
+
int Sqlite3_ruby_authorizer(void* data,int type,
|
50
|
+
const char* a,const char* b,const char* c,const char* d)
|
51
|
+
{
|
52
|
+
VALUE result;
|
53
|
+
CallbackData *cb = (CallbackData*)data;
|
54
|
+
result = rb_funcall(
|
55
|
+
cb->proc, rb_intern("call"), 6, cb->data, INT2FIX(type),
|
56
|
+
( a ? rb_str_new2(a) : Qnil ), ( b ? rb_str_new2(b) : Qnil ),
|
57
|
+
( c ? rb_str_new2(c) : Qnil ), ( d ? rb_str_new2(d) : Qnil ) );
|
58
|
+
return FIX2INT(result);
|
59
|
+
}
|
60
|
+
|
61
|
+
void Sqlite3_ruby_trace(void* data, const char *sql) {
|
62
|
+
CallbackData *cb = (CallbackData*)data;
|
63
|
+
rb_funcall( cb->proc, rb_intern("call"), 2, cb->data,
|
64
|
+
sql ? rb_str_new2(sql) : Qnil );
|
65
|
+
}
|
66
|
+
|
67
|
+
void Sqlite3_ruby_function_step(sqlite3_context* ctx,int n,
|
68
|
+
sqlite3_value** args)
|
69
|
+
{
|
70
|
+
CallbackData *data;
|
71
|
+
VALUE rb_args;
|
72
|
+
VALUE *rb_context;
|
73
|
+
int idx;
|
74
|
+
|
75
|
+
data = (CallbackData*)sqlite3_user_data(ctx);
|
76
|
+
|
77
|
+
if( data->proc2 != Qnil ) {
|
78
|
+
rb_context = (VALUE*)sqlite3_aggregate_context(ctx,sizeof(VALUE));
|
79
|
+
if( *rb_context == 0 ) {
|
80
|
+
*rb_context = rb_hash_new();
|
81
|
+
rb_gc_register_address( rb_context );
|
82
|
+
}
|
83
|
+
}
|
84
|
+
|
85
|
+
rb_args = rb_ary_new2(n+1);
|
86
|
+
rb_ary_push( rb_args, SWIG_NewPointerObj(ctx,SWIGTYPE_p_sqlite3_context,0) );
|
87
|
+
for( idx = 0; idx < n; idx++ ) {
|
88
|
+
rb_ary_push( rb_args, SWIG_NewPointerObj(args[idx],
|
89
|
+
SWIGTYPE_p_sqlite3_value,0) );
|
90
|
+
}
|
91
|
+
|
92
|
+
rb_apply( data->proc, rb_intern("call"), rb_args );
|
93
|
+
}
|
94
|
+
|
95
|
+
void Sqlite3_ruby_function_final(sqlite3_context *ctx) {
|
96
|
+
VALUE *rb_context;
|
97
|
+
CallbackData *data;
|
98
|
+
|
99
|
+
rb_context = (VALUE*)sqlite3_aggregate_context(ctx,sizeof(VALUE));
|
100
|
+
if( *rb_context == 0 ) {
|
101
|
+
*rb_context = rb_hash_new();
|
102
|
+
rb_gc_register_address( rb_context );
|
103
|
+
}
|
104
|
+
|
105
|
+
data = (CallbackData*)sqlite3_user_data(ctx);
|
106
|
+
|
107
|
+
rb_funcall( data->proc2, rb_intern("call"), 1,
|
108
|
+
SWIG_NewPointerObj(ctx,SWIGTYPE_p_sqlite3_context,0) );
|
109
|
+
|
110
|
+
rb_gc_unregister_address( rb_context );
|
111
|
+
}
|
112
|
+
%}
|
113
|
+
|
114
|
+
%markfunc CallbackData "mark_CallbackData";
|
115
|
+
|
116
|
+
struct CallbackData {
|
117
|
+
VALUE proc;
|
118
|
+
VALUE proc2;
|
119
|
+
VALUE data;
|
120
|
+
};
|
121
|
+
|
122
|
+
%typemap(in) const void *str {
|
123
|
+
$1 = (void*)RSTRING_PTR($input);
|
124
|
+
}
|
125
|
+
|
126
|
+
%typemap(in) (const char *filename, sqlite3**) {
|
127
|
+
$1 = STR2CSTR($input);
|
128
|
+
$2 = (sqlite3**)malloc( sizeof( sqlite3* ) );
|
129
|
+
}
|
130
|
+
|
131
|
+
%typemap(argout) (const char *filename, sqlite3**) {
|
132
|
+
VALUE ary;
|
133
|
+
ary = rb_ary_new2(2);
|
134
|
+
rb_ary_push( ary, $result );
|
135
|
+
rb_ary_push( ary, SWIG_NewPointerObj( *$2, SWIGTYPE_p_sqlite3, 0 ) );
|
136
|
+
free( $2 );
|
137
|
+
$result = ary;
|
138
|
+
}
|
139
|
+
|
140
|
+
%typemap(in) (const void *filename, sqlite3**) {
|
141
|
+
$1 = (void*)RSTRING_PTR($input);
|
142
|
+
$2 = (sqlite3**)malloc( sizeof( sqlite3* ) );
|
143
|
+
}
|
144
|
+
|
145
|
+
%typemap(argout) (const void *filename, sqlite3**) {
|
146
|
+
VALUE ary;
|
147
|
+
ary = rb_ary_new2(2);
|
148
|
+
rb_ary_push( ary, $result );
|
149
|
+
rb_ary_push( ary, SWIG_NewPointerObj( *$2, SWIGTYPE_p_sqlite3, 0 ) );
|
150
|
+
free( $2 );
|
151
|
+
$result = ary;
|
152
|
+
}
|
153
|
+
|
154
|
+
typedef void RUBY_BLOB;
|
155
|
+
%typemap(out) const RUBY_BLOB * {
|
156
|
+
$result = $1 ?
|
157
|
+
rb_str_new( (char*)$1, sqlite3_column_bytes( arg1, arg2 ) ) : Qnil;
|
158
|
+
}
|
159
|
+
|
160
|
+
typedef void RUBY_VALBLOB;
|
161
|
+
%typemap(out) const RUBY_VALBLOB * {
|
162
|
+
$result = $1 ? rb_str_new( (char*)$1, sqlite3_value_bytes( arg1 ) ) : Qnil;
|
163
|
+
}
|
164
|
+
|
165
|
+
%typemap(out) const void * {
|
166
|
+
int i;
|
167
|
+
if( $1 ) {
|
168
|
+
for( i = 0; ((char*)$1)[i]; i += 2 );
|
169
|
+
$result = rb_str_new( (char*)$1, i );
|
170
|
+
} else $result = Qnil;
|
171
|
+
}
|
172
|
+
|
173
|
+
%typemap(in) (const char * sql,int,sqlite3_stmt**,const char**) (sqlite3_stmt *stmt, char *errmsg) {
|
174
|
+
$1 = RSTRING_PTR($input);
|
175
|
+
$2 = RSTRING_LEN($input);
|
176
|
+
$3 = &stmt2;
|
177
|
+
$4 = &errmsg2;
|
178
|
+
}
|
179
|
+
|
180
|
+
%typemap(argout) (const char* sql,int,sqlite3_stmt**,const char**) {
|
181
|
+
VALUE ary;
|
182
|
+
ary = rb_ary_new2(3);
|
183
|
+
rb_ary_push( ary, $result );
|
184
|
+
rb_ary_push( ary, SWIG_NewPointerObj( stmt2, SWIGTYPE_p_sqlite3_stmt, 0 ) );
|
185
|
+
rb_ary_push( ary, errmsg2 ? rb_str_new2( errmsg2 ) : Qnil );
|
186
|
+
$result = ary;
|
187
|
+
}
|
188
|
+
|
189
|
+
%typemap(in) (const void* sql,int,sqlite3_stmt**,const void**) (sqlite3_stmt *stmt, void *errmsg) {
|
190
|
+
$1 = RSTRING_PTR($input);
|
191
|
+
$2 = RSTRING_LEN($input);
|
192
|
+
$3 = &stmt2;
|
193
|
+
$4 = &errmsg2;
|
194
|
+
}
|
195
|
+
|
196
|
+
%typemap(argout) (const void* sql,int,sqlite3_stmt**,const void**) {
|
197
|
+
VALUE ary;
|
198
|
+
int i;
|
199
|
+
|
200
|
+
for( i = 0; ((char*)errmsg2)[i]; i += 2 );
|
201
|
+
|
202
|
+
ary = rb_ary_new2(3);
|
203
|
+
rb_ary_push( ary, $result );
|
204
|
+
rb_ary_push( ary, SWIG_NewPointerObj( stmt2, SWIGTYPE_p_sqlite3_stmt, 0 ) );
|
205
|
+
rb_ary_push( ary, errmsg2 ? rb_str_new( (char*)errmsg2, i ) : Qnil );
|
206
|
+
$result = ary;
|
207
|
+
}
|
208
|
+
|
209
|
+
%typemap(in) (const void *blob,int) {
|
210
|
+
$1 = (void*)RSTRING_PTR($input);
|
211
|
+
$2 = RSTRING_LEN($input);
|
212
|
+
}
|
213
|
+
|
214
|
+
%typemap(in) (const void *blob,int,void(*free)(void*)) {
|
215
|
+
$1 = (void*)RSTRING_PTR($input);
|
216
|
+
$2 = RSTRING_LEN($input);
|
217
|
+
$3 = SQLITE_TRANSIENT;
|
218
|
+
}
|
219
|
+
|
220
|
+
%typemap(in) (const char *text,int) {
|
221
|
+
$1 = RSTRING_PTR($input);
|
222
|
+
$2 = RSTRING_LEN($input);
|
223
|
+
}
|
224
|
+
|
225
|
+
%typemap(in) (const char *text,int,void(*free)(void*)) {
|
226
|
+
$1 = RSTRING_PTR($input);
|
227
|
+
$2 = RSTRING_LEN($input);
|
228
|
+
$3 = SQLITE_TRANSIENT;
|
229
|
+
}
|
230
|
+
|
231
|
+
%typemap(in) (const void *utf16,int) {
|
232
|
+
$1 = (void*)RSTRING_PTR($input);
|
233
|
+
$2 = RSTRING_LEN($input);
|
234
|
+
}
|
235
|
+
|
236
|
+
%typemap(in) (const void *utf16,int,void(*free)(void*)) {
|
237
|
+
$1 = (void*)RSTRING_PTR($input);
|
238
|
+
$2 = RSTRING_LEN($input);
|
239
|
+
$3 = SQLITE_TRANSIENT;
|
240
|
+
}
|
241
|
+
|
242
|
+
%typemap(out) sqlite_int64 {
|
243
|
+
$result = rb_ll2inum( $1 );
|
244
|
+
}
|
245
|
+
|
246
|
+
%typemap(out) const char * {
|
247
|
+
$result = $1 ? rb_str_new2($1) : Qnil;
|
248
|
+
}
|
249
|
+
|
250
|
+
%typemap(in) sqlite_int64 {
|
251
|
+
$1 = rb_num2ll( $input );
|
252
|
+
}
|
253
|
+
|
254
|
+
%typemap(in) (sqlite3_context*,int data_size) {
|
255
|
+
SWIG_ConvertPtr($input,(void**)&$1, SWIGTYPE_p_sqlite3_context, 1);
|
256
|
+
$2 = 4;
|
257
|
+
}
|
258
|
+
|
259
|
+
%typemap(out) VALUE* {
|
260
|
+
$result = *(VALUE*)$1;
|
261
|
+
}
|
262
|
+
|
263
|
+
%constant int Sqlite3_ruby_busy_handler(void*,int);
|
264
|
+
%constant int Sqlite3_ruby_authorizer(void*,int,const char*,const char*,const char*,const char*);
|
265
|
+
%constant void Sqlite3_ruby_trace(void*,const char*);
|
266
|
+
%constant void Sqlite3_ruby_function_step(sqlite3_context* ctx,int n,
|
267
|
+
sqlite3_value** args);
|
268
|
+
%constant void Sqlite3_ruby_function_final(sqlite3_context* ctx);
|
269
|
+
|
270
|
+
const char *sqlite3_libversion(void);
|
271
|
+
int sqlite3_close(sqlite3*);
|
272
|
+
|
273
|
+
sqlite_int64 sqlite3_last_insert_rowid(sqlite3*);
|
274
|
+
|
275
|
+
int sqlite3_changes(sqlite3*);
|
276
|
+
int sqlite3_total_changes(sqlite3*);
|
277
|
+
void sqlite3_interrupt(sqlite3*);
|
278
|
+
|
279
|
+
int sqlite3_complete(const char*);
|
280
|
+
int sqlite3_complete16(const void *str);
|
281
|
+
|
282
|
+
int sqlite3_busy_handler(sqlite3*, int(*)(void*,int), void*);
|
283
|
+
int sqlite3_busy_timeout(sqlite3*,int);
|
284
|
+
int sqlite3_set_authorizer(sqlite3*, int(*)(void*,int,const char*,const char*,const char*,const char*), void*);
|
285
|
+
int sqlite3_trace(sqlite3*, void(*)(void*,const char*), void*);
|
286
|
+
|
287
|
+
int sqlite3_open(const char *filename, sqlite3 **);
|
288
|
+
int sqlite3_open16(const void *filename, sqlite3 **);
|
289
|
+
|
290
|
+
int sqlite3_errcode(sqlite3*);
|
291
|
+
const char *sqlite3_errmsg(sqlite3*);
|
292
|
+
const void *sqlite3_errmsg16(sqlite3*);
|
293
|
+
|
294
|
+
int sqlite3_prepare(sqlite3*,const char* sql,int,sqlite3_stmt**,const char**);
|
295
|
+
int sqlite3_prepare16(sqlite3*,const void* sql,int,sqlite3_stmt**,const void**);
|
296
|
+
|
297
|
+
int sqlite3_bind_blob(sqlite3_stmt*,int,const void *blob,int,void(*free)(void*));
|
298
|
+
int sqlite3_bind_double(sqlite3_stmt*,int,double);
|
299
|
+
int sqlite3_bind_int(sqlite3_stmt*,int,int);
|
300
|
+
int sqlite3_bind_int64(sqlite3_stmt*,int,sqlite_int64);
|
301
|
+
int sqlite3_bind_null(sqlite3_stmt*,int);
|
302
|
+
int sqlite3_bind_text(sqlite3_stmt*,int,const char*text,int,void(*free)(void*));
|
303
|
+
int sqlite3_bind_text16(sqlite3_stmt*,int,const void*utf16,int,void(*free)(void*));
|
304
|
+
|
305
|
+
int sqlite3_bind_parameter_count(sqlite3_stmt*);
|
306
|
+
const char *sqlite3_bind_parameter_name(sqlite3_stmt*,int);
|
307
|
+
int sqlite3_bind_parameter_index(sqlite3_stmt*,const char*);
|
308
|
+
|
309
|
+
int sqlite3_column_count(sqlite3_stmt*);
|
310
|
+
const char *sqlite3_column_name(sqlite3_stmt*,int);
|
311
|
+
const void *sqlite3_column_name16(sqlite3_stmt*,int);
|
312
|
+
const char *sqlite3_column_decltype(sqlite3_stmt*,int);
|
313
|
+
const void *sqlite3_column_decltype16(sqlite3_stmt*,int);
|
314
|
+
|
315
|
+
int sqlite3_step(sqlite3_stmt*);
|
316
|
+
|
317
|
+
int sqlite3_data_count(sqlite3_stmt*);
|
318
|
+
|
319
|
+
const RUBY_BLOB *sqlite3_column_blob(sqlite3_stmt*,int);
|
320
|
+
int sqlite3_column_bytes(sqlite3_stmt*,int);
|
321
|
+
int sqlite3_column_bytes16(sqlite3_stmt*,int);
|
322
|
+
double sqlite3_column_double(sqlite3_stmt*,int);
|
323
|
+
double sqlite3_column_int(sqlite3_stmt*,int);
|
324
|
+
sqlite_int64 sqlite3_column_int64(sqlite3_stmt*,int);
|
325
|
+
const char *sqlite3_column_text(sqlite3_stmt*,int);
|
326
|
+
const void *sqlite3_column_text16(sqlite3_stmt*,int);
|
327
|
+
int sqlite3_column_type(sqlite3_stmt*,int);
|
328
|
+
|
329
|
+
int sqlite3_finalize(sqlite3_stmt*);
|
330
|
+
int sqlite3_reset(sqlite3_stmt*);
|
331
|
+
|
332
|
+
int sqlite3_create_function(sqlite3*,const char*str,int,int,void*,void(*func)(sqlite3_context*,int,sqlite3_value**),void(*step)(sqlite3_context*,int,sqlite3_value**),void(*final)(sqlite3_context*));
|
333
|
+
|
334
|
+
int sqlite3_create_function16(sqlite3*,const void*str,int,int,void*,void(*func)(sqlite3_context*,int,sqlite3_value**),void(*step)(sqlite3_context*,int,sqlite3_value**),void(*final)(sqlite3_context*));
|
335
|
+
|
336
|
+
int sqlite3_aggregate_count(sqlite3_context*);
|
337
|
+
|
338
|
+
const RUBY_VALBLOB *sqlite3_value_blob(sqlite3_value*);
|
339
|
+
int sqlite3_value_bytes(sqlite3_value*);
|
340
|
+
int sqlite3_value_bytes16(sqlite3_value*);
|
341
|
+
double sqlite3_value_double(sqlite3_value*);
|
342
|
+
int sqlite3_value_int(sqlite3_value*);
|
343
|
+
sqlite_int64 sqlite3_value_int64(sqlite3_value*);
|
344
|
+
const char *sqlite3_value_text(sqlite3_value*);
|
345
|
+
const void *sqlite3_value_text16(sqlite3_value*);
|
346
|
+
const void *sqlite3_value_text16le(sqlite3_value*);
|
347
|
+
const void *sqlite3_value_text16be(sqlite3_value*);
|
348
|
+
int sqlite3_value_type(sqlite3_value*);
|
349
|
+
|
350
|
+
void sqlite3_result_blob(sqlite3_context*,const void *blob,int,void(*free)(void*));
|
351
|
+
void sqlite3_result_double(sqlite3_context*,double);
|
352
|
+
void sqlite3_result_error(sqlite3_context*,const char *text,int);
|
353
|
+
void sqlite3_result_error16(sqlite3_context*,const void *blob,int);
|
354
|
+
void sqlite3_result_int(sqlite3_context*,int);
|
355
|
+
void sqlite3_result_int64(sqlite3_context*,sqlite_int64);
|
356
|
+
void sqlite3_result_text(sqlite3_context*,const char* text,int,void(*free)(void*));
|
357
|
+
void sqlite3_result_text16(sqlite3_context*,const void* utf16,int,void(*free)(void*));
|
358
|
+
void sqlite3_result_text16le(sqlite3_context*,const void* utf16,int,void(*free)(void*));
|
359
|
+
void sqlite3_result_text16be(sqlite3_context*,const void* utf16,int,void(*free)(void*));
|
360
|
+
void sqlite3_result_value(sqlite3_context*,sqlite3_value*);
|
361
|
+
|
362
|
+
VALUE *sqlite3_aggregate_context(sqlite3_context*,int data_size);
|