turso_libsql 0.0.1 → 0.1.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: '090adcd702c2e96cb65a541e80dae9cd80479541917bef8f6f348dddc6fcbcf9'
4
- data.tar.gz: 54a10ba04c9959128508aa0d8201e8241c16ffdeb317ea0988b10c3a5c03a3c1
3
+ metadata.gz: de0be6e4a1939210654efb34f3d5b4bd11ffc6f0e147eb834be31f98a83b9789
4
+ data.tar.gz: 1dbc0222a2dbe3f61a2583a4751ce937535abfa6b6923d4664451920c612e940
5
5
  SHA512:
6
- metadata.gz: 92419b3d95b3ee2afacadc50ff8b275bcafe28d8375b7b1179342e9f41c6c845d515a1c896cd6575a1bec01d03cce7e7d78c16020312e54e7e3c5c352e422152
7
- data.tar.gz: 438ceb54aefbc5cda60056fab947608b2d2dd9aee47d2f3ec56da5dc497f0a630275cf08e5524730263a17535240d43bea48706a205b70fe7c5e1a75a8be8c2a
6
+ metadata.gz: 378198f7635a719b402a0e3f4e45602c37372ce75f079dc22e97b29f39b6487c4f04deab2b259b7482d9dc4ba3291f20ca29bb21a1edfd88490d5d549d8b96ce
7
+ data.tar.gz: c71d6809b090d469faa2f3432d6a5c99dc850b81028fa29a3696c4755c4268127c3d7208ce1f211860a21718d86666c7621f6fb1933a5483b230e719cc3de957
data/lib/libsql.rb CHANGED
@@ -5,8 +5,9 @@ module CLibsql # :nodoc:
5
5
 
6
6
  file =
7
7
  case RUBY_PLATFORM
8
- in /darwin/ then 'universal2-apple-darwin/liblibsql.dylib'
8
+ in /arm64-darwin/ then 'aarch64-apple-darwin/liblibsql.dylib'
9
9
  in /x86_64-linux/ then 'x86_64-unknown-linux-gnu/liblibsql.so'
10
+ in /aarch64-linux/ then 'aarch64-unknown-linux-gnu/liblibsql.so'
10
11
  in /arm64-linux/ then 'aarch64-unknown-linux-gnu/liblibsql.so'
11
12
  end
12
13
 
@@ -40,7 +41,7 @@ module CLibsql # :nodoc:
40
41
  def self.init(desc) = CLibsql.libsql_database_init(desc).tap(&:verify)
41
42
  def sync = CLibsql.libsql_database_sync(self).tap(&:verify)
42
43
  def connect = CLibsql.libsql_database_connect(self).tap(&:verify)
43
- def deinit = CLibsql.libsql_database_deinit self
44
+ def deinit = CLibsql.libsql_database_deinit(self)
44
45
  end
45
46
 
46
47
  class Connection < FFI::Struct # :nodoc:
@@ -78,7 +79,9 @@ module CLibsql # :nodoc:
78
79
  def bind_named(name, value) = CLibsql.libsql_statement_bind_named(self, name, value).tap(&:verify)
79
80
  def query = CLibsql.libsql_statement_query(self).tap(&:verify)
80
81
  def execute = CLibsql.libsql_statement_execute(self).tap(&:verify)
81
- def deinit = CLibsql.libsql_statement_deinit self
82
+ def column_count = CLibsql.libsql_statement_column_count(self)
83
+ def reset = CLibsql.libsql_statement_reset(self)
84
+ def deinit = CLibsql.libsql_statement_deinit(self)
82
85
  end
83
86
 
84
87
  class Rows < FFI::Struct # :nodoc:
@@ -89,6 +92,8 @@ module CLibsql # :nodoc:
89
92
 
90
93
  def next = CLibsql.libsql_rows_next(self).tap(&:verify)
91
94
  def deinit = CLibsql.libsql_rows_deinit(self)
95
+ def name_at(index) = CLibsql.libsql_rows_column_name(self, index)
96
+ def length = CLibsql.libsql_rows_column_length(self)
92
97
  end
93
98
 
94
99
  class Row < FFI::Struct # :nodoc:
@@ -158,7 +163,7 @@ module CLibsql # :nodoc:
158
163
  s
159
164
  end
160
165
 
161
- def deinit = CLibsql.libsql_slice_deinit self
166
+ def deinit = CLibsql.libsql_slice_deinit(self)
162
167
  end
163
168
 
164
169
  class ValueUnion < FFI::Union # :nodoc:
@@ -191,8 +196,6 @@ module CLibsql # :nodoc:
191
196
  end
192
197
 
193
198
  class Config < FFI::Struct # :nodoc:
194
- include Verify
195
-
196
199
  layout logger: :pointer,
197
200
  version: :pointer
198
201
  end
@@ -216,8 +219,12 @@ module CLibsql # :nodoc:
216
219
  attach_function :libsql_statement_bind_named, [Statement.by_value, :string, Value.by_value], Bind.by_value
217
220
  attach_function :libsql_statement_query, [Statement.by_value], Rows.by_value
218
221
  attach_function :libsql_statement_execute, [Statement.by_value], Execute.by_value
222
+ attach_function :libsql_statement_column_count, [Statement.by_value], :size_t
223
+ attach_function :libsql_statement_reset, [Statement.by_value], :void
219
224
 
220
225
  attach_function :libsql_rows_next, [Rows.by_value], Row.by_value
226
+ attach_function :libsql_rows_column_length, [Rows.by_value], :uint32
227
+ attach_function :libsql_rows_column_name, [Rows.by_value, :uint32], Slice.by_value
221
228
 
222
229
  attach_function :libsql_row_empty, [Row.by_value], :bool
223
230
  attach_function :libsql_row_value, [Row.by_value, :uint32], ResultValue.by_value
@@ -244,13 +251,15 @@ end
244
251
  module Libsql
245
252
  class Blob < String; end
246
253
 
254
+ class ClosedException < Exception; end
255
+
247
256
  module Prepareable
248
- def execute(sql, params = [])
249
- prepare(sql) { |stmt| stmt.execute(params) }
257
+ def execute(sql, params = [], &block)
258
+ prepare(sql) { |stmt| stmt.execute(params, &block) }
250
259
  end
251
260
 
252
- def query(sql, params = [])
253
- prepare(sql) { |stmt| stmt.query(params) }
261
+ def query(sql, params = [], &block)
262
+ prepare(sql) { |stmt| stmt.query(params, &block) }
254
263
  end
255
264
  end
256
265
 
@@ -262,11 +271,24 @@ module Libsql
262
271
  end
263
272
 
264
273
  def to_h = columns.zip(to_a).to_h
265
- def length = @inner.length
266
- def columns = (0...length).map { |i| @inner.name_at(i).to_s }
274
+
275
+ def length
276
+ raise ClosedException if closed?
277
+
278
+ @inner.length
279
+ end
280
+
281
+ def columns
282
+ raise ClosedException if closed?
283
+
284
+ (0...length).map { |i| @inner.name_at(i).to_s }
285
+ end
286
+
267
287
  def each = (0...length).each { |i| yield self[i] }
268
288
 
269
289
  def [](index)
290
+ raise ClosedException if closed?
291
+
270
292
  case index
271
293
  in Integer then @inner.value_at(index)[:ok].convert
272
294
  in String
@@ -277,7 +299,16 @@ module Libsql
277
299
  end
278
300
  end
279
301
 
280
- def close = @inner.deinit
302
+ def close
303
+ raise ClosedException if closed?
304
+
305
+ @inner.deinit
306
+ @inner = nil
307
+ end
308
+
309
+ def closed?
310
+ @inner.nil?
311
+ end
281
312
  end
282
313
 
283
314
  class Rows
@@ -287,11 +318,25 @@ module Libsql
287
318
  @inner = inner
288
319
  end
289
320
 
321
+ def column_count
322
+ raise ClosedException if closed?
323
+
324
+ @inner.length
325
+ end
326
+
327
+ def columns
328
+ raise ClosedException if closed?
329
+
330
+ (0...column_count).map { |i| @inner.name_at(i).to_s }
331
+ end
332
+
290
333
  def to_a
291
334
  map(&:to_h)
292
335
  end
293
336
 
294
337
  def next
338
+ raise ClosedException if closed?
339
+
295
340
  row = @inner.next
296
341
  Row.new row unless row.empty?
297
342
  end
@@ -303,7 +348,16 @@ module Libsql
303
348
  end
304
349
  end
305
350
 
306
- def close = @inner.deinit
351
+ def close
352
+ raise ClosedException if closed?
353
+
354
+ @inner.deinit
355
+ @inner = nil
356
+ end
357
+
358
+ def closed?
359
+ @inner.nil?
360
+ end
307
361
  end
308
362
 
309
363
  class Statement
@@ -312,6 +366,8 @@ module Libsql
312
366
  end
313
367
 
314
368
  def bind(params)
369
+ raise ClosedException if closed?
370
+
315
371
  case params
316
372
  in Array then params.each { |v| @inner.bind_value convert(v) }
317
373
  in Hash
@@ -322,19 +378,44 @@ module Libsql
322
378
  end
323
379
 
324
380
  def execute(params = [])
381
+ raise ClosedException if closed?
382
+
325
383
  bind params
326
- @inner.execute
384
+ @inner.execute[:rows_changed]
327
385
  end
328
386
 
329
387
  def query(params = [])
388
+ raise ClosedException if closed?
389
+
330
390
  bind params
331
391
  rows = Rows.new @inner.query
332
392
  return rows unless block_given?
333
393
 
334
- begin yield rows ensure fows.close end
394
+ begin yield rows ensure rows.close end
395
+ end
396
+
397
+ def column_count
398
+ raise ClosedException if closed?
399
+
400
+ @inner.column_count
335
401
  end
336
402
 
337
- def close = @inner.deinit
403
+ def reset
404
+ raise ClosedException if closed?
405
+
406
+ @inner.reset
407
+ end
408
+
409
+ def close
410
+ raise ClosedException if closed?
411
+
412
+ @inner.deinit
413
+ @inner = nil
414
+ end
415
+
416
+ def closed?
417
+ @inner.nil?
418
+ end
338
419
 
339
420
  private
340
421
 
@@ -357,16 +438,37 @@ module Libsql
357
438
  end
358
439
 
359
440
  def prepare(sql)
441
+ raise ClosedException if closed?
442
+
360
443
  stmt = Statement.new @inner.prepare sql
361
444
  return stmt unless block_given?
362
445
 
363
446
  begin yield stmt ensure stmt.close end
364
447
  end
365
448
 
366
- def execute_batch(sql) = @inner.execute_batch(sql)
449
+ def execute_batch(sql)
450
+ raise ClosedException if closed?
451
+
452
+ @inner.execute_batch(sql)
453
+ end
454
+
455
+ def rollback
456
+ raise ClosedException if closed?
367
457
 
368
- def rollback = @inner.rollback
369
- def commit = @inner.commit
458
+ @inner.rollback
459
+ @inner = nil
460
+ end
461
+
462
+ def commit
463
+ raise ClosedException if closed?
464
+
465
+ @inner.commit
466
+ @inner = nil
467
+ end
468
+
469
+ def closed?
470
+ @inner.nil?
471
+ end
370
472
  end
371
473
 
372
474
  class Connection
@@ -377,6 +479,8 @@ module Libsql
377
479
  end
378
480
 
379
481
  def transaction
482
+ raise ClosedException if closed?
483
+
380
484
  tx = Transaction.new @inner.transaction
381
485
  return tx unless block_given?
382
486
 
@@ -392,6 +496,8 @@ module Libsql
392
496
  end
393
497
 
394
498
  def prepare(sql)
499
+ raise ClosedException if closed?
500
+
395
501
  stmt = Statement.new @inner.prepare sql
396
502
 
397
503
  return stmt unless block_given?
@@ -401,7 +507,16 @@ module Libsql
401
507
 
402
508
  def execute_batch(sql) = @inner.execute_batch(sql)
403
509
 
404
- def close = @inner.deinit
510
+ def close
511
+ raise ClosedException if closed?
512
+
513
+ @inner.deinit
514
+ @inner = nil
515
+ end
516
+
517
+ def closed?
518
+ @inner.nil?
519
+ end
405
520
  end
406
521
 
407
522
  class Database
@@ -423,18 +538,31 @@ module Libsql
423
538
  end
424
539
 
425
540
  def sync
541
+ raise ClosedException if closed?
542
+
426
543
  @inner.sync
427
544
  end
428
545
 
429
546
  def connect
547
+ raise ClosedException if closed?
548
+
430
549
  conn = Connection.new @inner.connect
431
550
 
432
- return unless block_given?
551
+ return conn unless block_given?
433
552
 
434
553
  begin yield conn ensure conn.close end
435
554
  end
436
555
 
437
- def close = @inner.deinit
556
+ def close
557
+ raise ClosedException if closed?
558
+
559
+ @inner.deinit
560
+ @inner = nil
561
+ end
562
+
563
+ def closed?
564
+ @inner.nil?
565
+ end
438
566
  end
439
567
  end
440
568
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: turso_libsql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Levy Albuquerque
@@ -9,15 +9,43 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 1980-01-01 00:00:00.000000000 Z
12
- dependencies: []
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ffi
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.17'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.17'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.10'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.10'
13
41
  description: libSQL Ruby SDK
14
42
  email: levy@turso.tech
15
43
  executables: []
16
44
  extensions: []
17
45
  extra_rdoc_files: []
18
46
  files:
47
+ - lib/lib/aarch64-apple-darwin/liblibsql.dylib
19
48
  - lib/lib/aarch64-unknown-linux-gnu/liblibsql.so
20
- - lib/lib/universal2-apple-darwin/liblibsql.dylib
21
49
  - lib/lib/x86_64-unknown-linux-gnu/liblibsql.so
22
50
  - lib/libsql.rb
23
51
  homepage: https://rubygems.org/gems/turso_libsql
@@ -32,14 +60,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
32
60
  requirements:
33
61
  - - ">="
34
62
  - !ruby/object:Gem::Version
35
- version: '0'
63
+ version: '3.3'
36
64
  required_rubygems_version: !ruby/object:Gem::Requirement
37
65
  requirements:
38
66
  - - ">="
39
67
  - !ruby/object:Gem::Version
40
68
  version: '0'
41
69
  requirements: []
42
- rubygems_version: 3.5.16
70
+ rubygems_version: 3.3.26
43
71
  signing_key:
44
72
  specification_version: 4
45
73
  summary: libSQL