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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6467de8ba44e1e77c57965e0360a18f9e2cf97084f0c507d0b1946e2cb0bb153
4
- data.tar.gz: a12610ea4fab0207d5360f5410428ab7d8ce004c98ecd05fcb13785bf173c196
3
+ metadata.gz: 407877ae6a216daacd70b87735171f77845fe57ec6a0b109a96e4cc31c00f97b
4
+ data.tar.gz: 2273841ec089faac02d3e7901d0e9ffd91cf1bc95e47e0b7c912cfbb218f6f55
5
5
  SHA512:
6
- metadata.gz: 5c17e8b73c0e94718a80bdcce58c98072c640b952959b441c7053f367984650688ee25ce5d7e0c6c4706d9d13d688f6e006c336e78c0c803d35af3a9cab15885
7
- data.tar.gz: 194b2b8e9d469927e08bb6bc9b9e88238fb2b289bace6501c736817cfdee29e4c13d20d420a1a344c107ce039786b703826a11091a8f2eb3cc366dde6f922d46
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
@@ -0,0 +1,9 @@
1
+ ## 0.2 2021-05-24
2
+
3
+ - Implement `Database#transaction_active?`
4
+ - Add tests
5
+
6
+ ## 0.1 2021-05-21
7
+
8
+ - First release
9
+
data/Gemfile CHANGED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
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
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2021 Digital Fabric
3
+ Copyright (c) 2021 Sharon Rosner
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
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.query_hash('select 1 as foo') { |r| p r }
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/run.rb'
15
+ exec 'ruby test/test_database.rb'
16
16
  end
17
17
 
18
18
  CLEAN.include "**/*.o", "**/*.so", "**/*.so.*", "**/*.a", "**/*.bundle", "**/*.jar", "pkg", "tmp"
@@ -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.github.io/extralite'
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/",
@@ -1,3 +1,3 @@
1
1
  module Extralite
2
- VERSION = '0.1'
2
+ VERSION = '0.2'
3
3
  end
data/test/helper.rb ADDED
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/setup'
4
+ require 'extralite'
5
+ require 'minitest/autorun'
6
+ require 'minitest/reporters'
7
+
8
+ Minitest::Reporters.use! [
9
+ Minitest::Reporters::SpecReporter.new
10
+ ]
@@ -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.1'
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-21 00:00:00.000000000 Z
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
- homepage: https://digital-fabric.github.io/extralite
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.0.8
150
+ rubygems_version: 3.1.4
147
151
  signing_key:
148
152
  specification_version: 4
149
153
  summary: Extra-lightweight SQLite3 wrapper for Ruby