extralite 0.1 → 0.2
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/.github/workflows/test.yml +31 -0
- data/CHANGELOG.md +9 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +66 -0
- data/LICENSE +1 -1
- data/README.md +9 -3
- data/Rakefile +1 -1
- data/ext/extralite/extralite.c +12 -0
- data/extralite.gemspec +1 -1
- data/lib/extralite/version.rb +1 -1
- data/test/helper.rb +10 -0
- data/test/test_database.rb +51 -0
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 407877ae6a216daacd70b87735171f77845fe57ec6a0b109a96e4cc31c00f97b
|
4
|
+
data.tar.gz: 2273841ec089faac02d3e7901d0e9ffd91cf1bc95e47e0b7c912cfbb218f6f55
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eed74e69024c0e714e1a1e8449e3e2503e8dde5e2ed807a64ce46cec079b58c9c7417014ac6a4600958e355e0218b0ccc63def43b1ba98c5d5fe0de11b4d4559
|
7
|
+
data.tar.gz: dd20969cb233586cbaf998fda0d65cafe703d5cdaa3f1ff9377a9a679f7b9dd602d71525259cd459bfabddc6d2a4c01b330c59a673b23de6ed37abe9920b7aab
|
@@ -0,0 +1,31 @@
|
|
1
|
+
name: Tests
|
2
|
+
|
3
|
+
on: [push, pull_request]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
build:
|
7
|
+
strategy:
|
8
|
+
fail-fast: false
|
9
|
+
matrix:
|
10
|
+
os: [ubuntu-latest]
|
11
|
+
ruby: [2.6, 2.7, 3.0]
|
12
|
+
|
13
|
+
name: >-
|
14
|
+
${{matrix.os}}, ${{matrix.ruby}}
|
15
|
+
|
16
|
+
runs-on: ${{matrix.os}}
|
17
|
+
steps:
|
18
|
+
- uses: actions/checkout@v1
|
19
|
+
- uses: actions/setup-ruby@v1
|
20
|
+
with:
|
21
|
+
ruby-version: ${{matrix.ruby}}
|
22
|
+
- name: Install dependencies
|
23
|
+
run: |
|
24
|
+
gem install bundler
|
25
|
+
bundle install
|
26
|
+
- name: Show Linux kernel version
|
27
|
+
run: uname -r
|
28
|
+
- name: Compile C-extension
|
29
|
+
run: bundle exec rake compile
|
30
|
+
- name: Run tests
|
31
|
+
run: bundle exec rake test
|
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
extralite (0.2)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
ansi (1.5.0)
|
10
|
+
ast (2.4.2)
|
11
|
+
builder (3.2.4)
|
12
|
+
coderay (1.1.3)
|
13
|
+
docile (1.4.0)
|
14
|
+
json (2.5.1)
|
15
|
+
method_source (1.0.0)
|
16
|
+
minitest (5.14.4)
|
17
|
+
minitest-reporters (1.4.2)
|
18
|
+
ansi
|
19
|
+
builder
|
20
|
+
minitest (>= 5.0)
|
21
|
+
ruby-progressbar
|
22
|
+
parallel (1.20.1)
|
23
|
+
parser (3.0.1.1)
|
24
|
+
ast (~> 2.4.1)
|
25
|
+
pry (0.13.1)
|
26
|
+
coderay (~> 1.1)
|
27
|
+
method_source (~> 1.0)
|
28
|
+
rainbow (3.0.0)
|
29
|
+
rake (13.0.3)
|
30
|
+
rake-compiler (1.1.1)
|
31
|
+
rake
|
32
|
+
regexp_parser (2.1.1)
|
33
|
+
rexml (3.2.5)
|
34
|
+
rubocop (0.85.1)
|
35
|
+
parallel (~> 1.10)
|
36
|
+
parser (>= 2.7.0.1)
|
37
|
+
rainbow (>= 2.2.2, < 4.0)
|
38
|
+
regexp_parser (>= 1.7)
|
39
|
+
rexml
|
40
|
+
rubocop-ast (>= 0.0.3)
|
41
|
+
ruby-progressbar (~> 1.7)
|
42
|
+
unicode-display_width (>= 1.4.0, < 2.0)
|
43
|
+
rubocop-ast (1.5.0)
|
44
|
+
parser (>= 3.0.1.1)
|
45
|
+
ruby-progressbar (1.11.0)
|
46
|
+
simplecov (0.17.1)
|
47
|
+
docile (~> 1.1)
|
48
|
+
json (>= 1.8, < 3)
|
49
|
+
simplecov-html (~> 0.10.0)
|
50
|
+
simplecov-html (0.10.2)
|
51
|
+
unicode-display_width (1.7.0)
|
52
|
+
|
53
|
+
PLATFORMS
|
54
|
+
ruby
|
55
|
+
|
56
|
+
DEPENDENCIES
|
57
|
+
extralite!
|
58
|
+
minitest (= 5.14.4)
|
59
|
+
minitest-reporters (= 1.4.2)
|
60
|
+
pry (= 0.13.1)
|
61
|
+
rake-compiler (= 1.1.1)
|
62
|
+
rubocop (= 0.85.1)
|
63
|
+
simplecov (= 0.17.1)
|
64
|
+
|
65
|
+
BUNDLED WITH
|
66
|
+
2.1.4
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -21,9 +21,11 @@ require 'extralite'
|
|
21
21
|
db = Extralite::Database.new('mydb')
|
22
22
|
|
23
23
|
# get query results as array of hashes
|
24
|
+
db.query('select 1 as foo') #=> [{ :foo => 1 }]
|
25
|
+
# or:
|
24
26
|
db.query_hash('select 1 as foo') #=> [{ :foo => 1 }]
|
25
27
|
# or iterate over results
|
26
|
-
db.
|
28
|
+
db.query('select 1 as foo') { |r| p r }
|
27
29
|
# { :foo => 1 }
|
28
30
|
|
29
31
|
# get query results as array of arrays
|
@@ -45,7 +47,11 @@ db.query_single_value("select 'foo'") #=> "foo"
|
|
45
47
|
db.query_hash('select ? as foo, ? as bar', 1, 2) #=> [{ :foo => 1, :bar => 2 }]
|
46
48
|
|
47
49
|
# get last insert rowid
|
48
|
-
rowid = db.last_insert_id
|
49
|
-
```
|
50
|
+
rowid = db.last_insert_id
|
50
51
|
|
52
|
+
# get rows changed in last query
|
53
|
+
rows_changed = db.changes
|
51
54
|
|
55
|
+
# get db filename
|
56
|
+
Extralite::Database.new('/tmp/my.db').filename #=> "/tmp/my.db"
|
57
|
+
```
|
data/Rakefile
CHANGED
@@ -12,7 +12,7 @@ task :recompile => [:clean, :compile]
|
|
12
12
|
|
13
13
|
task :default => [:compile, :test]
|
14
14
|
task :test do
|
15
|
-
exec 'ruby test/
|
15
|
+
exec 'ruby test/test_database.rb'
|
16
16
|
end
|
17
17
|
|
18
18
|
CLEAN.include "**/*.o", "**/*.so", "**/*.so.*", "**/*.a", "**/*.bundle", "**/*.jar", "pkg", "tmp"
|
data/ext/extralite/extralite.c
CHANGED
@@ -162,12 +162,16 @@ step:
|
|
162
162
|
case SQLITE_DONE:
|
163
163
|
break;
|
164
164
|
case SQLITE_BUSY:
|
165
|
+
sqlite3_finalize(stmt);
|
165
166
|
rb_raise(cError, "Database is busy");
|
166
167
|
case SQLITE_ERROR:
|
168
|
+
sqlite3_finalize(stmt);
|
167
169
|
rb_raise(cError, "%s", sqlite3_errmsg(db->sqlite3_db));
|
168
170
|
default:
|
171
|
+
sqlite3_finalize(stmt);
|
169
172
|
rb_raise(cError, "Invalid return code for sqlite3_step: %d", rc);
|
170
173
|
}
|
174
|
+
// TODO, use ensure to finalize statement
|
171
175
|
sqlite3_finalize(stmt);
|
172
176
|
RB_GC_GUARD(column_names);
|
173
177
|
RB_GC_GUARD(row);
|
@@ -354,6 +358,13 @@ VALUE Database_filename(int argc, VALUE *argv, VALUE self) {
|
|
354
358
|
return filename ? rb_str_new_cstr(filename) : Qnil;
|
355
359
|
}
|
356
360
|
|
361
|
+
VALUE Database_transaction_active_p(VALUE self) {
|
362
|
+
Database_t *db;
|
363
|
+
GetDatabase(self, db);
|
364
|
+
|
365
|
+
return sqlite3_get_autocommit(db->sqlite3_db) ? Qfalse : Qtrue;
|
366
|
+
}
|
367
|
+
|
357
368
|
void Init_Extralite() {
|
358
369
|
VALUE mExtralite = rb_define_module("Extralite");
|
359
370
|
VALUE cDatabase = rb_define_class_under(mExtralite, "Database", rb_cObject);
|
@@ -370,6 +381,7 @@ void Init_Extralite() {
|
|
370
381
|
rb_define_method(cDatabase, "last_insert_rowid", Database_last_insert_rowid, 0);
|
371
382
|
rb_define_method(cDatabase, "changes", Database_changes, 0);
|
372
383
|
rb_define_method(cDatabase, "filename", Database_filename, -1);
|
384
|
+
rb_define_method(cDatabase, "transaction_active?", Database_transaction_active_p, 0);
|
373
385
|
|
374
386
|
cError = rb_define_class_under(mExtralite, "Error", rb_eRuntimeError);
|
375
387
|
}
|
data/extralite.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.author = 'Sharon Rosner'
|
9
9
|
s.email = 'sharon@noteflakes.com'
|
10
10
|
s.files = `git ls-files`.split
|
11
|
-
s.homepage = 'https://digital-fabric
|
11
|
+
s.homepage = 'https://github.com/digital-fabric/extralite'
|
12
12
|
s.metadata = {
|
13
13
|
"source_code_uri" => "https://github.com/digital-fabric/extralite",
|
14
14
|
"documentation_uri" => "https://digital-fabric.github.io/extralite/",
|
data/lib/extralite/version.rb
CHANGED
data/test/helper.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'helper'
|
4
|
+
|
5
|
+
class DatabaseTest < MiniTest::Test
|
6
|
+
def setup
|
7
|
+
@db = Extralite::Database.new('/tmp/extralite.db')
|
8
|
+
@db.query('create table if not exists t (x,y,z)')
|
9
|
+
@db.query('delete from t')
|
10
|
+
@db.query('insert into t values (1, 2, 3)')
|
11
|
+
@db.query('insert into t values (4, 5, 6)')
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_database
|
15
|
+
r = @db.query('select 1 as foo')
|
16
|
+
assert_equal [{foo: 1}], r
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_query
|
20
|
+
r = @db.query('select * from t')
|
21
|
+
assert_equal [{x: 1, y: 2, z: 3}, {x: 4, y: 5, z: 6}], r
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_query_hash
|
25
|
+
r = @db.query_hash('select * from t')
|
26
|
+
assert_equal [{x: 1, y: 2, z: 3}, {x: 4, y: 5, z: 6}], r
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_query_ary
|
30
|
+
r = @db.query_ary('select * from t')
|
31
|
+
assert_equal [[1, 2, 3], [4, 5, 6]], r
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_query_single_column
|
35
|
+
r = @db.query_single_column('select y from t')
|
36
|
+
assert_equal [2, 5], r
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_query_single_value
|
40
|
+
r = @db.query_single_value('select z from t order by Z desc limit 1')
|
41
|
+
assert_equal 6, r
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_transaction_active?
|
45
|
+
assert_equal false, @db.transaction_active?
|
46
|
+
@db.query('begin')
|
47
|
+
assert_equal true, @db.transaction_active?
|
48
|
+
@db.query('rollback')
|
49
|
+
assert_equal false, @db.transaction_active?
|
50
|
+
end
|
51
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: extralite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.2'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sharon Rosner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-05-
|
11
|
+
date: 2021-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|
@@ -102,9 +102,11 @@ extensions:
|
|
102
102
|
extra_rdoc_files:
|
103
103
|
- README.md
|
104
104
|
files:
|
105
|
+
- ".github/workflows/test.yml"
|
105
106
|
- ".gitignore"
|
106
107
|
- CHANGELOG.md
|
107
108
|
- Gemfile
|
109
|
+
- Gemfile.lock
|
108
110
|
- LICENSE
|
109
111
|
- README.md
|
110
112
|
- Rakefile
|
@@ -116,7 +118,9 @@ files:
|
|
116
118
|
- extralite.gemspec
|
117
119
|
- lib/extralite.rb
|
118
120
|
- lib/extralite/version.rb
|
119
|
-
|
121
|
+
- test/helper.rb
|
122
|
+
- test/test_database.rb
|
123
|
+
homepage: https://github.com/digital-fabric/extralite
|
120
124
|
licenses:
|
121
125
|
- MIT
|
122
126
|
metadata:
|
@@ -143,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
143
147
|
- !ruby/object:Gem::Version
|
144
148
|
version: '0'
|
145
149
|
requirements: []
|
146
|
-
rubygems_version: 3.
|
150
|
+
rubygems_version: 3.1.4
|
147
151
|
signing_key:
|
148
152
|
specification_version: 4
|
149
153
|
summary: Extra-lightweight SQLite3 wrapper for Ruby
|