sqlite3 1.3.5-x86-mswin32-60 → 1.3.6-x86-mswin32-60
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.rdoc +32 -0
- data/ext/sqlite3/database.c +38 -7
- data/ext/sqlite3/extconf.rb +4 -0
- data/ext/sqlite3/sqlite3_ruby.h +9 -0
- data/ext/sqlite3/statement.c +5 -1
- data/lib/sqlite3.rb +1 -1
- data/lib/sqlite3/1.8/sqlite3_native.so +0 -0
- data/lib/sqlite3/1.9/sqlite3_native.so +0 -0
- data/lib/sqlite3/database.rb +2 -2
- data/lib/sqlite3/resultset.rb +93 -24
- data/lib/sqlite3/statement.rb +13 -17
- data/lib/sqlite3/version.rb +2 -2
- data/tasks/native.rake +2 -2
- data/test/helper.rb +12 -1
- data/test/test_backup.rb +2 -2
- data/test/test_collation.rb +1 -1
- data/test/test_database.rb +7 -3
- data/test/test_database_readonly.rb +1 -1
- data/test/test_deprecated.rb +8 -1
- data/test/test_encoding.rb +1 -1
- data/test/test_integration.rb +1 -1
- data/test/test_integration_open_close.rb +1 -1
- data/test/test_integration_pending.rb +1 -1
- data/test/test_integration_resultset.rb +6 -3
- data/test/test_integration_statement.rb +2 -2
- data/test/test_result_set.rb +37 -0
- data/test/test_sqlite3.rb +1 -1
- data/test/test_statement.rb +1 -1
- data/test/test_statement_execute.rb +1 -1
- metadata +38 -36
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,35 @@
|
|
1
|
+
=== 1.3.6 / 2012-04-16
|
2
|
+
|
3
|
+
* Enhancements
|
4
|
+
* Windows: build against SQLite 3.7.11
|
5
|
+
* Added SQLite3::ResultSet#each_hash for fetching each row as a hash.
|
6
|
+
* Added SQLite3::ResultSet#next_hash for fetching one row as a hash.
|
7
|
+
|
8
|
+
* Bugfixes
|
9
|
+
* Support both UTF-16LE and UTF-16BE encoding modes on PPC. Closes #63
|
10
|
+
* Protect parameters to custom functions from being garbage collected too
|
11
|
+
soon. Fixes #60. Thanks hirataya!
|
12
|
+
* Fix backwards compatibility with 1.2.5 with bind vars and `query` method.
|
13
|
+
Fixes #35.
|
14
|
+
* Fix double definition error caused by defining sqlite3_int64/uint64.
|
15
|
+
* Fix suspicious version regexp.
|
16
|
+
|
17
|
+
* Deprecations
|
18
|
+
* ArrayWithTypesAndFields#types is deprecated and the class will be removed
|
19
|
+
in version 2.0.0. Please use the `types` method on the ResultSet class
|
20
|
+
that created this object.
|
21
|
+
* ArrayWithTypesAndFields#fields is deprecated and the class will be removed
|
22
|
+
in version 2.0.0. Please use the `columns` method on the ResultSet class
|
23
|
+
that created this object.
|
24
|
+
* The ArrayWithTypesAndFields class will be removed in 2.0.0
|
25
|
+
* The ArrayWithTypes class will be removed in 2.0.0
|
26
|
+
* HashWithTypesAndFields#types is deprecated and the class will be removed
|
27
|
+
in version 2.0.0. Please use the `types` method on the ResultSet class
|
28
|
+
that created this object.
|
29
|
+
* HashWithTypesAndFields#fields is deprecated and the class will be removed
|
30
|
+
in version 2.0.0. Please use the `columns` method on the ResultSet class
|
31
|
+
that created this object.
|
32
|
+
|
1
33
|
=== 1.3.5 / 2011-12-03 - ZOMG Holidays are here Edition!
|
2
34
|
|
3
35
|
* Enhancements
|
data/ext/sqlite3/database.c
CHANGED
@@ -44,7 +44,9 @@ static VALUE initialize(int argc, VALUE *argv, VALUE self)
|
|
44
44
|
VALUE file;
|
45
45
|
VALUE opts;
|
46
46
|
VALUE zvfs;
|
47
|
+
#ifdef HAVE_SQLITE3_OPEN_V2
|
47
48
|
int mode = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE;
|
49
|
+
#endif
|
48
50
|
int status;
|
49
51
|
|
50
52
|
Data_Get_Struct(self, sqlite3Ruby, ctx);
|
@@ -60,7 +62,7 @@ static VALUE initialize(int argc, VALUE *argv, VALUE self)
|
|
60
62
|
else Check_Type(opts, T_HASH);
|
61
63
|
|
62
64
|
#ifdef HAVE_RUBY_ENCODING_H
|
63
|
-
if(UTF16_LE_P(file)) {
|
65
|
+
if(UTF16_LE_P(file) || UTF16_BE_P(file)) {
|
64
66
|
status = sqlite3_open16(utf16_string_value_ptr(file), &ctx->db);
|
65
67
|
} else {
|
66
68
|
#endif
|
@@ -76,14 +78,25 @@ static VALUE initialize(int argc, VALUE *argv, VALUE self)
|
|
76
78
|
#endif
|
77
79
|
|
78
80
|
if (Qtrue == rb_hash_aref(opts, ID2SYM(rb_intern("readonly")))) {
|
81
|
+
#ifdef HAVE_SQLITE3_OPEN_V2
|
79
82
|
mode = SQLITE_OPEN_READONLY;
|
83
|
+
#else
|
84
|
+
rb_raise(rb_eNotImpError, "sqlite3-ruby was compiled against a version of sqlite that does not support readonly databases");
|
85
|
+
#endif
|
80
86
|
}
|
87
|
+
#ifdef HAVE_SQLITE3_OPEN_V2
|
81
88
|
status = sqlite3_open_v2(
|
82
89
|
StringValuePtr(file),
|
83
90
|
&ctx->db,
|
84
91
|
mode,
|
85
92
|
NIL_P(zvfs) ? NULL : StringValuePtr(zvfs)
|
86
93
|
);
|
94
|
+
#else
|
95
|
+
status = sqlite3_open(
|
96
|
+
StringValuePtr(file),
|
97
|
+
&ctx->db
|
98
|
+
);
|
99
|
+
#endif
|
87
100
|
}
|
88
101
|
|
89
102
|
#ifdef HAVE_RUBY_ENCODING_H
|
@@ -100,7 +113,11 @@ static VALUE initialize(int argc, VALUE *argv, VALUE self)
|
|
100
113
|
rb_iv_set(self, "@functions", rb_hash_new());
|
101
114
|
rb_iv_set(self, "@results_as_hash", rb_hash_aref(opts, sym_results_as_hash));
|
102
115
|
rb_iv_set(self, "@type_translation", rb_hash_aref(opts, sym_type_translation));
|
116
|
+
#ifdef HAVE_SQLITE3_OPEN_V2
|
103
117
|
rb_iv_set(self, "@readonly", mode == SQLITE_OPEN_READONLY ? Qtrue : Qfalse);
|
118
|
+
#else
|
119
|
+
rb_iv_set(self, "@readonly", Qfalse);
|
120
|
+
#endif
|
104
121
|
|
105
122
|
if(rb_block_given_p()) {
|
106
123
|
rb_yield(self);
|
@@ -319,7 +336,9 @@ static void rb_sqlite3_func(sqlite3_context * ctx, int argc, sqlite3_value **arg
|
|
319
336
|
params = xcalloc((size_t)argc, sizeof(VALUE *));
|
320
337
|
|
321
338
|
for(i = 0; i < argc; i++) {
|
322
|
-
|
339
|
+
VALUE param = sqlite3val2rb(argv[i]);
|
340
|
+
RB_GC_GUARD(param);
|
341
|
+
params[i] = param;
|
323
342
|
}
|
324
343
|
}
|
325
344
|
|
@@ -625,13 +644,12 @@ static VALUE collation(VALUE self, VALUE name, VALUE comparator)
|
|
625
644
|
Data_Get_Struct(self, sqlite3Ruby, ctx);
|
626
645
|
REQUIRE_OPEN_DB(ctx);
|
627
646
|
|
628
|
-
CHECK(ctx->db,
|
647
|
+
CHECK(ctx->db, sqlite3_create_collation(
|
629
648
|
ctx->db,
|
630
649
|
StringValuePtr(name),
|
631
650
|
SQLITE_UTF8,
|
632
651
|
(void *)comparator,
|
633
|
-
NIL_P(comparator) ? NULL : rb_comparator_func
|
634
|
-
NULL));
|
652
|
+
NIL_P(comparator) ? NULL : rb_comparator_func));
|
635
653
|
|
636
654
|
/* Make sure our comparator doesn't get garbage collected. */
|
637
655
|
rb_hash_aset(rb_iv_get(self, "@collations"), name, comparator);
|
@@ -639,10 +657,11 @@ static VALUE collation(VALUE self, VALUE name, VALUE comparator)
|
|
639
657
|
return self;
|
640
658
|
}
|
641
659
|
|
660
|
+
#ifdef HAVE_SQLITE3_LOAD_EXTENSION
|
642
661
|
/* call-seq: db.load_extension(file)
|
643
662
|
*
|
644
663
|
* Loads an SQLite extension library from the named file. Extension
|
645
|
-
* loading must be enabled using db.enable_load_extension(
|
664
|
+
* loading must be enabled using db.enable_load_extension(true) prior
|
646
665
|
* to calling this API.
|
647
666
|
*/
|
648
667
|
static VALUE load_extension(VALUE self, VALUE file)
|
@@ -664,7 +683,9 @@ static VALUE load_extension(VALUE self, VALUE file)
|
|
664
683
|
|
665
684
|
return self;
|
666
685
|
}
|
686
|
+
#endif
|
667
687
|
|
688
|
+
#ifdef HAVE_SQLITE3_ENABLE_LOAD_EXTENSION
|
668
689
|
/* call-seq: db.enable_load_extension(onoff)
|
669
690
|
*
|
670
691
|
* Enable or disable extension loading.
|
@@ -672,13 +693,23 @@ static VALUE load_extension(VALUE self, VALUE file)
|
|
672
693
|
static VALUE enable_load_extension(VALUE self, VALUE onoff)
|
673
694
|
{
|
674
695
|
sqlite3RubyPtr ctx;
|
696
|
+
int onoffparam;
|
675
697
|
Data_Get_Struct(self, sqlite3Ruby, ctx);
|
676
698
|
REQUIRE_OPEN_DB(ctx);
|
677
699
|
|
678
|
-
|
700
|
+
if (Qtrue == onoff) {
|
701
|
+
onoffparam = 1;
|
702
|
+
} else if (Qfalse == onoff) {
|
703
|
+
onoffparam = 0;
|
704
|
+
} else {
|
705
|
+
onoffparam = (int)NUM2INT(onoff);
|
706
|
+
}
|
707
|
+
|
708
|
+
CHECK(ctx->db, sqlite3_enable_load_extension(ctx->db, onoffparam));
|
679
709
|
|
680
710
|
return self;
|
681
711
|
}
|
712
|
+
#endif
|
682
713
|
|
683
714
|
#ifdef HAVE_RUBY_ENCODING_H
|
684
715
|
static int enc_cb(void * _self, int UNUSED(columns), char **data, char **UNUSED(names))
|
data/ext/sqlite3/extconf.rb
CHANGED
@@ -43,5 +43,9 @@ have_func('sqlite3_backup_init')
|
|
43
43
|
have_func('sqlite3_column_database_name')
|
44
44
|
have_func('sqlite3_enable_load_extension')
|
45
45
|
have_func('sqlite3_load_extension')
|
46
|
+
have_func('sqlite3_open_v2')
|
47
|
+
have_func('sqlite3_prepare_v2')
|
48
|
+
have_type('sqlite3_int64', 'sqlite3.h')
|
49
|
+
have_type('sqlite3_uint64', 'sqlite3.h')
|
46
50
|
|
47
51
|
create_makefile('sqlite3/sqlite3_native')
|
data/ext/sqlite3/sqlite3_ruby.h
CHANGED
@@ -21,6 +21,7 @@
|
|
21
21
|
|
22
22
|
#define UTF8_P(_obj) (rb_enc_get_index(_obj) == rb_utf8_encindex())
|
23
23
|
#define UTF16_LE_P(_obj) (rb_enc_get_index(_obj) == rb_enc_find_index("UTF-16LE"))
|
24
|
+
#define UTF16_BE_P(_obj) (rb_enc_get_index(_obj) == rb_enc_find_index("UTF-16BE"))
|
24
25
|
#define SQLITE3_UTF8_STR_NEW2(_obj) \
|
25
26
|
(rb_enc_associate_index(rb_str_new2(_obj), rb_utf8_encindex()))
|
26
27
|
|
@@ -33,6 +34,14 @@
|
|
33
34
|
|
34
35
|
#include <sqlite3.h>
|
35
36
|
|
37
|
+
#ifndef HAVE_TYPE_SQLITE3_INT64
|
38
|
+
typedef sqlite_int64 sqlite3_int64;
|
39
|
+
#endif
|
40
|
+
|
41
|
+
#ifndef HAVE_TYPE_SQLITE3_UINT64
|
42
|
+
typedef sqlite_uint64 sqlite3_uint64;
|
43
|
+
#endif
|
44
|
+
|
36
45
|
extern VALUE mSqlite3;
|
37
46
|
extern VALUE cSqlite3Blob;
|
38
47
|
|
data/ext/sqlite3/statement.c
CHANGED
@@ -49,7 +49,11 @@ static VALUE initialize(VALUE self, VALUE db, VALUE sql)
|
|
49
49
|
}
|
50
50
|
#endif
|
51
51
|
|
52
|
+
#ifdef HAVE_SQLITE3_PREPARE_V2
|
52
53
|
status = sqlite3_prepare_v2(
|
54
|
+
#else
|
55
|
+
status = sqlite3_prepare(
|
56
|
+
#endif
|
53
57
|
db_ctx->db,
|
54
58
|
(const char *)StringValuePtr(sql),
|
55
59
|
(int)RSTRING_LEN(sql),
|
@@ -359,7 +363,7 @@ static VALUE column_name(VALUE self, VALUE index)
|
|
359
363
|
|
360
364
|
name = sqlite3_column_name(ctx->st, (int)NUM2INT(index));
|
361
365
|
|
362
|
-
if(name) return
|
366
|
+
if(name) return SQLITE3_UTF8_STR_NEW2(name);
|
363
367
|
return Qnil;
|
364
368
|
}
|
365
369
|
|
data/lib/sqlite3.rb
CHANGED
Binary file
|
Binary file
|
data/lib/sqlite3/database.rb
CHANGED
@@ -236,7 +236,7 @@ Support for this behavior will be removed in version 2.0.0.
|
|
236
236
|
# This is a convenience method for creating a statement, binding
|
237
237
|
# paramters to it, and calling execute:
|
238
238
|
#
|
239
|
-
# result = db.query( "select * from foo where a=?", 5
|
239
|
+
# result = db.query( "select * from foo where a=?", [5])
|
240
240
|
# # is the same as
|
241
241
|
# result = db.prepare( "select * from foo where a=?" ).execute( 5 )
|
242
242
|
#
|
@@ -250,7 +250,7 @@ Support for this behavior will be removed in version 2.0.0.
|
|
250
250
|
if args.empty?
|
251
251
|
bind_vars = []
|
252
252
|
else
|
253
|
-
bind_vars = [
|
253
|
+
bind_vars = [bind_vars] + args
|
254
254
|
end
|
255
255
|
|
256
256
|
warn(<<-eowarn) if $VERBOSE
|
data/lib/sqlite3/resultset.rb
CHANGED
@@ -10,23 +10,61 @@ module SQLite3
|
|
10
10
|
class ResultSet
|
11
11
|
include Enumerable
|
12
12
|
|
13
|
-
|
14
|
-
# result. (ArrayFields is installed.)
|
15
|
-
class ArrayWithTypes < Array
|
13
|
+
class ArrayWithTypes < Array # :nodoc:
|
16
14
|
attr_accessor :types
|
17
15
|
end
|
18
16
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
class ArrayWithTypesAndFields < Array # :nodoc:
|
18
|
+
attr_writer :types
|
19
|
+
attr_writer :fields
|
20
|
+
|
21
|
+
def types
|
22
|
+
warn(<<-eowarn) if $VERBOSE
|
23
|
+
#{caller[0]} is calling #{self.class}#types. This method will be removed in
|
24
|
+
sqlite3 version 2.0.0, please call the `types` method on the SQLite3::ResultSet
|
25
|
+
object that created this object
|
26
|
+
eowarn
|
27
|
+
@types
|
28
|
+
end
|
29
|
+
|
30
|
+
def fields
|
31
|
+
warn(<<-eowarn) if $VERBOSE
|
32
|
+
#{caller[0]} is calling #{self.class}#fields. This method will be removed in
|
33
|
+
sqlite3 version 2.0.0, please call the `columns` method on the SQLite3::ResultSet
|
34
|
+
object that created this object
|
35
|
+
eowarn
|
36
|
+
@fields
|
37
|
+
end
|
24
38
|
end
|
25
39
|
|
26
40
|
# The class of which we return an object in case we want a Hash as
|
27
41
|
# result.
|
28
|
-
class
|
29
|
-
|
42
|
+
class HashWithTypesAndFields < Hash # :nodoc:
|
43
|
+
attr_writer :types
|
44
|
+
attr_writer :fields
|
45
|
+
|
46
|
+
def types
|
47
|
+
warn(<<-eowarn) if $VERBOSE
|
48
|
+
#{caller[0]} is calling #{self.class}#types. This method will be removed in
|
49
|
+
sqlite3 version 2.0.0, please call the `types` method on the SQLite3::ResultSet
|
50
|
+
object that created this object
|
51
|
+
eowarn
|
52
|
+
@types
|
53
|
+
end
|
54
|
+
|
55
|
+
def fields
|
56
|
+
warn(<<-eowarn) if $VERBOSE
|
57
|
+
#{caller[0]} is calling #{self.class}#fields. This method will be removed in
|
58
|
+
sqlite3 version 2.0.0, please call the `columns` method on the SQLite3::ResultSet
|
59
|
+
object that created this object
|
60
|
+
eowarn
|
61
|
+
@fields
|
62
|
+
end
|
63
|
+
|
64
|
+
def [] key
|
65
|
+
key = fields[key] if key.is_a? Numeric
|
66
|
+
super key
|
67
|
+
end
|
30
68
|
end
|
31
69
|
|
32
70
|
# Create a new ResultSet attached to the given database, using the
|
@@ -63,6 +101,10 @@ module SQLite3
|
|
63
101
|
# For hashes, the column names are the keys of the hash, and the column
|
64
102
|
# types are accessible via the +types+ property.
|
65
103
|
def next
|
104
|
+
if @db.results_as_hash
|
105
|
+
return next_hash
|
106
|
+
end
|
107
|
+
|
66
108
|
row = @stmt.step
|
67
109
|
return nil if @stmt.done?
|
68
110
|
|
@@ -72,33 +114,39 @@ module SQLite3
|
|
72
114
|
end
|
73
115
|
end
|
74
116
|
|
75
|
-
if
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
row = new_row
|
117
|
+
if row.respond_to?(:fields)
|
118
|
+
# FIXME: this can only happen if the translator returns something
|
119
|
+
# that responds to `fields`. Since we're removing the translator
|
120
|
+
# in 2.0, we can remove this branch in 2.0.
|
121
|
+
row = ArrayWithTypes.new(row)
|
81
122
|
else
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
end
|
87
|
-
row.fields = @stmt.columns
|
123
|
+
# FIXME: the `fields` and `types` methods are deprecated on this
|
124
|
+
# object for version 2.0, so we can safely remove this branch
|
125
|
+
# as well.
|
126
|
+
row = ArrayWithTypesAndFields.new(row)
|
88
127
|
end
|
89
128
|
|
129
|
+
row.fields = @stmt.columns
|
90
130
|
row.types = @stmt.types
|
91
131
|
row
|
92
132
|
end
|
93
133
|
|
94
134
|
# Required by the Enumerable mixin. Provides an internal iterator over the
|
95
135
|
# rows of the result set.
|
96
|
-
def each
|
136
|
+
def each
|
97
137
|
while node = self.next
|
98
138
|
yield node
|
99
139
|
end
|
100
140
|
end
|
101
141
|
|
142
|
+
# Provides an internal iterator over the rows of the result set where
|
143
|
+
# each row is yielded as a hash.
|
144
|
+
def each_hash
|
145
|
+
while node = next_hash
|
146
|
+
yield node
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
102
150
|
# Closes the statement that spawned this result set.
|
103
151
|
# <em>Use with caution!</em> Closing a result set will automatically
|
104
152
|
# close any other result sets that were spawned from the same statement.
|
@@ -121,6 +169,27 @@ module SQLite3
|
|
121
169
|
@stmt.columns
|
122
170
|
end
|
123
171
|
|
124
|
-
|
172
|
+
# Return the next row as a hash
|
173
|
+
def next_hash
|
174
|
+
row = @stmt.step
|
175
|
+
return nil if @stmt.done?
|
176
|
+
|
177
|
+
# FIXME: type translation is deprecated, so this can be removed
|
178
|
+
# in 2.0
|
179
|
+
if @db.type_translation
|
180
|
+
row = @stmt.types.zip(row).map do |type, value|
|
181
|
+
@db.translator.translate( type, value )
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
# FIXME: this can be switched to a regular hash in 2.0
|
186
|
+
row = HashWithTypesAndFields[*@stmt.columns.zip(row).flatten]
|
125
187
|
|
188
|
+
# FIXME: these methods are deprecated for version 2.0, so we can remove
|
189
|
+
# this code in 2.0
|
190
|
+
row.fields = @stmt.columns
|
191
|
+
row.types = @stmt.types
|
192
|
+
row
|
193
|
+
end
|
194
|
+
end
|
126
195
|
end
|
data/lib/sqlite3/statement.rb
CHANGED
@@ -120,23 +120,6 @@ module SQLite3
|
|
120
120
|
@types
|
121
121
|
end
|
122
122
|
|
123
|
-
# A convenience method for obtaining the metadata about the query. Note
|
124
|
-
# that this will actually execute the SQL, which means it can be a
|
125
|
-
# (potentially) expensive operation.
|
126
|
-
def get_metadata
|
127
|
-
@columns = []
|
128
|
-
@types = []
|
129
|
-
|
130
|
-
column_count.times do |column|
|
131
|
-
@columns << column_name(column)
|
132
|
-
@types << column_decltype(column)
|
133
|
-
end
|
134
|
-
|
135
|
-
@columns.freeze
|
136
|
-
@types.freeze
|
137
|
-
end
|
138
|
-
private :get_metadata
|
139
|
-
|
140
123
|
# Performs a sanity check to ensure that the statement is not
|
141
124
|
# closed. If it is, an exception is raised.
|
142
125
|
def must_be_open! # :nodoc:
|
@@ -144,5 +127,18 @@ module SQLite3
|
|
144
127
|
raise SQLite3::Exception, "cannot use a closed statement"
|
145
128
|
end
|
146
129
|
end
|
130
|
+
|
131
|
+
private
|
132
|
+
# A convenience method for obtaining the metadata about the query. Note
|
133
|
+
# that this will actually execute the SQL, which means it can be a
|
134
|
+
# (potentially) expensive operation.
|
135
|
+
def get_metadata
|
136
|
+
@columns = Array.new(column_count) do |column|
|
137
|
+
column_name column
|
138
|
+
end
|
139
|
+
@types = Array.new(column_count) do |column|
|
140
|
+
column_decltype column
|
141
|
+
end
|
142
|
+
end
|
147
143
|
end
|
148
144
|
end
|
data/lib/sqlite3/version.rb
CHANGED
data/tasks/native.rake
CHANGED
@@ -4,8 +4,8 @@ require 'rake/extensiontask'
|
|
4
4
|
# NOTE: version used by cross compilation of Windows native extension
|
5
5
|
# It do not affect compilation under other operating systems
|
6
6
|
# The version indicated is the minimum DLL suggested for correct functionality
|
7
|
-
BINARY_VERSION = "3.7.
|
8
|
-
URL_VERSION = "
|
7
|
+
BINARY_VERSION = "3.7.11"
|
8
|
+
URL_VERSION = "3071100"
|
9
9
|
|
10
10
|
# build sqlite3_native C extension
|
11
11
|
Rake::ExtensionTask.new('sqlite3_native', HOE.spec) do |ext|
|
data/test/helper.rb
CHANGED
data/test/test_backup.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
require
|
1
|
+
require 'helper'
|
2
2
|
|
3
3
|
module SQLite3
|
4
|
-
class TestBackup <
|
4
|
+
class TestBackup < SQLite3::TestCase
|
5
5
|
def setup
|
6
6
|
@sdb = SQLite3::Database.new(':memory:')
|
7
7
|
@ddb = SQLite3::Database.new(':memory:')
|
data/test/test_collation.rb
CHANGED
data/test/test_database.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
module SQLite3
|
4
|
-
class TestDatabase <
|
4
|
+
class TestDatabase < SQLite3::TestCase
|
5
5
|
attr_reader :db
|
6
6
|
|
7
7
|
def setup
|
@@ -77,8 +77,12 @@ module SQLite3
|
|
77
77
|
# determine if Ruby is running on Big Endian platform
|
78
78
|
utf16 = ([1].pack("I") == [1].pack("N")) ? "UTF-16BE" : "UTF-16LE"
|
79
79
|
|
80
|
-
|
81
|
-
|
80
|
+
if RUBY_VERSION >= "1.9"
|
81
|
+
db = SQLite3::Database.new(':memory:'.encode(utf16), :utf16 => true)
|
82
|
+
else
|
83
|
+
db = SQLite3::Database.new(Iconv.conv(utf16, 'UTF-8', ':memory:'),
|
84
|
+
:utf16 => true)
|
85
|
+
end
|
82
86
|
assert db
|
83
87
|
end
|
84
88
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
module SQLite3
|
4
|
-
class TestDatabaseReadonly <
|
4
|
+
class TestDatabaseReadonly < SQLite3::TestCase
|
5
5
|
def setup
|
6
6
|
File.unlink 'test-readonly.db' if File.exists?('test-readonly.db')
|
7
7
|
@db = SQLite3::Database.new('test-readonly.db')
|
data/test/test_deprecated.rb
CHANGED
@@ -1,12 +1,15 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
module SQLite3
|
4
|
-
class TestDeprecated <
|
4
|
+
class TestDeprecated < SQLite3::TestCase
|
5
|
+
attr_reader :db
|
6
|
+
|
5
7
|
def setup
|
6
8
|
super
|
7
9
|
@warn_before = $-w
|
8
10
|
$-w = false
|
9
11
|
@db = SQLite3::Database.new(':memory:')
|
12
|
+
@db.execute 'CREATE TABLE test_table (name text, age int)'
|
10
13
|
end
|
11
14
|
|
12
15
|
def teardown
|
@@ -14,6 +17,10 @@ module SQLite3
|
|
14
17
|
$-w = @warn_before
|
15
18
|
end
|
16
19
|
|
20
|
+
def test_query_with_many_bind_params_not_nil
|
21
|
+
assert_equal [[1, 2]], db.query('select ?, ?', 1, 2).to_a
|
22
|
+
end
|
23
|
+
|
17
24
|
def test_execute_with_many_bind_params_not_nil
|
18
25
|
assert_equal [[1, 2]], @db.execute("select ?, ?", 1, 2).to_a
|
19
26
|
end
|
data/test/test_encoding.rb
CHANGED
data/test/test_integration.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
class TC_ResultSet <
|
3
|
+
class TC_ResultSet < SQLite3::TestCase
|
4
4
|
def setup
|
5
5
|
@db = SQLite3::Database.new(":memory:")
|
6
6
|
@db.transaction do
|
@@ -98,8 +98,11 @@ class TC_ResultSet < Test::Unit::TestCase
|
|
98
98
|
def test_next_results_as_hash
|
99
99
|
@db.results_as_hash = true
|
100
100
|
@result.reset( 1 )
|
101
|
-
|
102
|
-
|
101
|
+
hash = @result.next
|
102
|
+
assert_equal( { "a" => 1, "b" => "foo" },
|
103
|
+
hash )
|
104
|
+
assert_equal hash[0], 1
|
105
|
+
assert_equal hash[1], "foo"
|
103
106
|
end
|
104
107
|
|
105
108
|
def test_tainted_results_as_hash
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
module SQLite3
|
4
|
+
class TestResultSet < SQLite3::TestCase
|
5
|
+
def test_each_hash
|
6
|
+
db = SQLite3::Database.new ':memory:'
|
7
|
+
db.execute "create table foo ( a integer primary key, b text )"
|
8
|
+
list = ('a'..'z').to_a
|
9
|
+
list.each do |t|
|
10
|
+
db.execute "insert into foo (b) values (\"#{t}\")"
|
11
|
+
end
|
12
|
+
|
13
|
+
rs = db.prepare('select * from foo').execute
|
14
|
+
rs.each_hash do |hash|
|
15
|
+
assert_equal list[hash['a'] - 1], hash['b']
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_next_hash
|
20
|
+
db = SQLite3::Database.new ':memory:'
|
21
|
+
db.execute "create table foo ( a integer primary key, b text )"
|
22
|
+
list = ('a'..'z').to_a
|
23
|
+
list.each do |t|
|
24
|
+
db.execute "insert into foo (b) values (\"#{t}\")"
|
25
|
+
end
|
26
|
+
|
27
|
+
rs = db.prepare('select * from foo').execute
|
28
|
+
rows = []
|
29
|
+
while row = rs.next_hash
|
30
|
+
rows << row
|
31
|
+
end
|
32
|
+
rows.each do |hash|
|
33
|
+
assert_equal list[hash['a'] - 1], hash['b']
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/test/test_sqlite3.rb
CHANGED
data/test/test_statement.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sqlite3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 1.3.
|
9
|
+
- 6
|
10
|
+
version: 1.3.6
|
11
11
|
platform: x86-mswin32-60
|
12
12
|
authors:
|
13
13
|
- Jamis Buck
|
@@ -17,68 +17,68 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date:
|
20
|
+
date: 2012-04-16 00:00:00 Z
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
|
-
name:
|
23
|
+
name: rdoc
|
24
24
|
prerelease: false
|
25
25
|
requirement: &id001 !ruby/object:Gem::Requirement
|
26
26
|
none: false
|
27
27
|
requirements:
|
28
28
|
- - ~>
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
hash:
|
30
|
+
hash: 19
|
31
31
|
segments:
|
32
|
-
-
|
33
|
-
-
|
34
|
-
|
35
|
-
version: 0.7.0
|
32
|
+
- 3
|
33
|
+
- 10
|
34
|
+
version: "3.10"
|
36
35
|
type: :development
|
37
36
|
version_requirements: *id001
|
38
37
|
- !ruby/object:Gem::Dependency
|
39
|
-
name:
|
38
|
+
name: rake-compiler
|
40
39
|
prerelease: false
|
41
40
|
requirement: &id002 !ruby/object:Gem::Requirement
|
42
41
|
none: false
|
43
42
|
requirements:
|
44
43
|
- - ~>
|
45
44
|
- !ruby/object:Gem::Version
|
46
|
-
hash:
|
45
|
+
hash: 3
|
47
46
|
segments:
|
48
47
|
- 0
|
49
|
-
-
|
50
|
-
-
|
51
|
-
version: 0.
|
48
|
+
- 7
|
49
|
+
- 0
|
50
|
+
version: 0.7.0
|
52
51
|
type: :development
|
53
52
|
version_requirements: *id002
|
54
53
|
- !ruby/object:Gem::Dependency
|
55
|
-
name:
|
54
|
+
name: mini_portile
|
56
55
|
prerelease: false
|
57
56
|
requirement: &id003 !ruby/object:Gem::Requirement
|
58
57
|
none: false
|
59
58
|
requirements:
|
60
59
|
- - ~>
|
61
60
|
- !ruby/object:Gem::Version
|
62
|
-
hash:
|
61
|
+
hash: 19
|
63
62
|
segments:
|
63
|
+
- 0
|
64
|
+
- 2
|
64
65
|
- 2
|
65
|
-
|
66
|
-
version: "2.12"
|
66
|
+
version: 0.2.2
|
67
67
|
type: :development
|
68
68
|
version_requirements: *id003
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: hoe
|
71
71
|
prerelease: false
|
72
72
|
requirement: &id004 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ~>
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
hash:
|
77
|
+
hash: 7
|
78
78
|
segments:
|
79
79
|
- 3
|
80
|
-
-
|
81
|
-
version: "3.
|
80
|
+
- 0
|
81
|
+
version: "3.0"
|
82
82
|
type: :development
|
83
83
|
version_requirements: *id004
|
84
84
|
description: |-
|
@@ -96,15 +96,15 @@ executables: []
|
|
96
96
|
extensions: []
|
97
97
|
|
98
98
|
extra_rdoc_files:
|
99
|
+
- API_CHANGES.rdoc
|
100
|
+
- CHANGELOG.rdoc
|
99
101
|
- Manifest.txt
|
100
102
|
- README.rdoc
|
101
|
-
- CHANGELOG.rdoc
|
102
|
-
- API_CHANGES.rdoc
|
103
|
-
- ext/sqlite3/sqlite3.c
|
104
103
|
- ext/sqlite3/backup.c
|
105
|
-
- ext/sqlite3/statement.c
|
106
104
|
- ext/sqlite3/database.c
|
107
105
|
- ext/sqlite3/exception.c
|
106
|
+
- ext/sqlite3/sqlite3.c
|
107
|
+
- ext/sqlite3/statement.c
|
108
108
|
files:
|
109
109
|
- API_CHANGES.rdoc
|
110
110
|
- CHANGELOG.rdoc
|
@@ -156,6 +156,7 @@ files:
|
|
156
156
|
- test/test_sqlite3.rb
|
157
157
|
- test/test_statement.rb
|
158
158
|
- test/test_statement_execute.rb
|
159
|
+
- test/test_result_set.rb
|
159
160
|
- .gemtest
|
160
161
|
- lib/sqlite3/1.8/sqlite3_native.so
|
161
162
|
- lib/sqlite3/1.9/sqlite3_native.so
|
@@ -193,22 +194,23 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
193
194
|
requirements: []
|
194
195
|
|
195
196
|
rubyforge_project: sqlite3
|
196
|
-
rubygems_version: 1.8.
|
197
|
+
rubygems_version: 1.8.21
|
197
198
|
signing_key:
|
198
199
|
specification_version: 3
|
199
200
|
summary: This module allows Ruby programs to interface with the SQLite3 database engine (http://www.sqlite.org)
|
200
201
|
test_files:
|
202
|
+
- test/test_backup.rb
|
203
|
+
- test/test_collation.rb
|
201
204
|
- test/test_database.rb
|
202
|
-
- test/test_integration_open_close.rb
|
203
205
|
- test/test_database_readonly.rb
|
204
|
-
- test/test_statement.rb
|
205
|
-
- test/test_integration_resultset.rb
|
206
206
|
- test/test_deprecated.rb
|
207
|
-
- test/test_backup.rb
|
208
207
|
- test/test_encoding.rb
|
209
|
-
- test/test_sqlite3.rb
|
210
|
-
- test/test_collation.rb
|
211
208
|
- test/test_integration.rb
|
212
|
-
- test/
|
213
|
-
- test/test_integration_statement.rb
|
209
|
+
- test/test_integration_open_close.rb
|
214
210
|
- test/test_integration_pending.rb
|
211
|
+
- test/test_integration_resultset.rb
|
212
|
+
- test/test_integration_statement.rb
|
213
|
+
- test/test_result_set.rb
|
214
|
+
- test/test_sqlite3.rb
|
215
|
+
- test/test_statement.rb
|
216
|
+
- test/test_statement_execute.rb
|