turso_libsql 0.0.0 → 0.1.1

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: 6fafb9e0e973d8423ef2dd4962d955993e41a2fad35b6944586029baafb7b1c5
4
- data.tar.gz: 31ce80e48a0d003f909904a01042f117d4886a3f35f1a42f83fed6b91d55534a
3
+ metadata.gz: 9042a62d9edb2a8d561a9abf342f023a5abb8645c77cbdacddfa02b7c733f389
4
+ data.tar.gz: efb3bd164df4b1867a5fc94b0ee03984057b271f806a202fc9177cfbfc997001
5
5
  SHA512:
6
- metadata.gz: 75e05163dc75b52ebd907ca253cac6458c192e74e3c1f06fdb29ee78e387ac4ddaca0297006c47e3745843cc5457d3a9f587b3cbe0c2af50f5f0aa29d4c1de37
7
- data.tar.gz: 62d68206b0c7ae11e4fa084d87c2d84710950af5eb415d1d6438a9b467f1527264fa64c811dbe9df5cebcfa6913e728e81ea5d3ca9054d81dfb4f6b782c8eb97
6
+ metadata.gz: 674c3288de9c1bc6e3cafff199f2868f532776d3fa289302573a1ef1edc82687ffc6b8bab92cd44308d8a441bf436a69d068be886b86bdd455e6f6ad2ff21ba9
7
+ data.tar.gz: 31298baac13d6b7f575d01db35fbee30a0d752819f9addf1b003a205e367174c8811fbc37425463fec8a556353376e0ba6cea0d2be2a3eef945c4784b530d857
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:
@@ -216,8 +221,12 @@ module CLibsql # :nodoc:
216
221
  attach_function :libsql_statement_bind_named, [Statement.by_value, :string, Value.by_value], Bind.by_value
217
222
  attach_function :libsql_statement_query, [Statement.by_value], Rows.by_value
218
223
  attach_function :libsql_statement_execute, [Statement.by_value], Execute.by_value
224
+ attach_function :libsql_statement_column_count, [Statement.by_value], :size_t
225
+ attach_function :libsql_statement_reset, [Statement.by_value], :void
219
226
 
220
227
  attach_function :libsql_rows_next, [Rows.by_value], Row.by_value
228
+ attach_function :libsql_rows_column_length, [Rows.by_value], :uint32
229
+ attach_function :libsql_rows_column_name, [Rows.by_value, :uint32], Slice.by_value
221
230
 
222
231
  attach_function :libsql_row_empty, [Row.by_value], :bool
223
232
  attach_function :libsql_row_value, [Row.by_value, :uint32], ResultValue.by_value
@@ -244,6 +253,8 @@ end
244
253
  module Libsql
245
254
  class Blob < String; end
246
255
 
256
+ class ClosedException < Exception; end
257
+
247
258
  module Prepareable
248
259
  def execute(sql, params = [])
249
260
  prepare(sql) { |stmt| stmt.execute(params) }
@@ -262,11 +273,24 @@ module Libsql
262
273
  end
263
274
 
264
275
  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 }
276
+
277
+ def length
278
+ raise ClosedException if closed?
279
+
280
+ @inner.length
281
+ end
282
+
283
+ def columns
284
+ raise ClosedException if closed?
285
+
286
+ (0...length).map { |i| @inner.name_at(i).to_s }
287
+ end
288
+
267
289
  def each = (0...length).each { |i| yield self[i] }
268
290
 
269
291
  def [](index)
292
+ raise ClosedException if closed?
293
+
270
294
  case index
271
295
  in Integer then @inner.value_at(index)[:ok].convert
272
296
  in String
@@ -277,7 +301,16 @@ module Libsql
277
301
  end
278
302
  end
279
303
 
280
- def close = @inner.deinit
304
+ def close
305
+ raise ClosedException if closed?
306
+
307
+ @inner.deinit
308
+ @inner = nil
309
+ end
310
+
311
+ def closed?
312
+ @inner.nil?
313
+ end
281
314
  end
282
315
 
283
316
  class Rows
@@ -287,11 +320,25 @@ module Libsql
287
320
  @inner = inner
288
321
  end
289
322
 
323
+ def column_count
324
+ raise ClosedException if closed?
325
+
326
+ @inner.length
327
+ end
328
+
329
+ def columns
330
+ raise ClosedException if closed?
331
+
332
+ (0...column_count).map { |i| @inner.name_at(i).to_s }
333
+ end
334
+
290
335
  def to_a
291
336
  map(&:to_h)
292
337
  end
293
338
 
294
339
  def next
340
+ raise ClosedException if closed?
341
+
295
342
  row = @inner.next
296
343
  Row.new row unless row.empty?
297
344
  end
@@ -303,7 +350,16 @@ module Libsql
303
350
  end
304
351
  end
305
352
 
306
- def close = @inner.deinit
353
+ def close
354
+ raise ClosedException if closed?
355
+
356
+ @inner.deinit
357
+ @inner = nil
358
+ end
359
+
360
+ def closed?
361
+ @inner.nil?
362
+ end
307
363
  end
308
364
 
309
365
  class Statement
@@ -312,6 +368,8 @@ module Libsql
312
368
  end
313
369
 
314
370
  def bind(params)
371
+ raise ClosedException if closed?
372
+
315
373
  case params
316
374
  in Array then params.each { |v| @inner.bind_value convert(v) }
317
375
  in Hash
@@ -322,19 +380,44 @@ module Libsql
322
380
  end
323
381
 
324
382
  def execute(params = [])
383
+ raise ClosedException if closed?
384
+
325
385
  bind params
326
- @inner.execute
386
+ @inner.execute[:rows_changed]
327
387
  end
328
388
 
329
389
  def query(params = [])
390
+ raise ClosedException if closed?
391
+
330
392
  bind params
331
393
  rows = Rows.new @inner.query
332
394
  return rows unless block_given?
333
395
 
334
- begin yield rows ensure fows.close end
396
+ begin yield rows ensure rows.close end
335
397
  end
336
398
 
337
- def close = @inner.deinit
399
+ def column_count
400
+ raise ClosedException if closed?
401
+
402
+ @inner.column_count
403
+ end
404
+
405
+ def reset
406
+ raise ClosedException if closed?
407
+
408
+ @inner.reset
409
+ end
410
+
411
+ def close
412
+ raise ClosedException if closed?
413
+
414
+ @inner.deinit
415
+ @inner = nil
416
+ end
417
+
418
+ def closed?
419
+ @inner.nil?
420
+ end
338
421
 
339
422
  private
340
423
 
@@ -357,16 +440,37 @@ module Libsql
357
440
  end
358
441
 
359
442
  def prepare(sql)
443
+ raise ClosedException if closed?
444
+
360
445
  stmt = Statement.new @inner.prepare sql
361
446
  return stmt unless block_given?
362
447
 
363
448
  begin yield stmt ensure stmt.close end
364
449
  end
365
450
 
366
- def execute_batch(sql) = @inner.execute_batch(sql)
451
+ def execute_batch(sql)
452
+ raise ClosedException if closed?
453
+
454
+ @inner.execute_batch(sql)
455
+ end
456
+
457
+ def rollback
458
+ raise ClosedException if closed?
459
+
460
+ @inner.rollback
461
+ @inner = nil
462
+ end
463
+
464
+ def commit
465
+ raise ClosedException if closed?
466
+
467
+ @inner.commit
468
+ @inner = nil
469
+ end
367
470
 
368
- def rollback = @inner.rollback
369
- def commit = @inner.commit
471
+ def closed?
472
+ @inner.nil?
473
+ end
370
474
  end
371
475
 
372
476
  class Connection
@@ -377,6 +481,8 @@ module Libsql
377
481
  end
378
482
 
379
483
  def transaction
484
+ raise ClosedException if closed?
485
+
380
486
  tx = Transaction.new @inner.transaction
381
487
  return tx unless block_given?
382
488
 
@@ -392,6 +498,8 @@ module Libsql
392
498
  end
393
499
 
394
500
  def prepare(sql)
501
+ raise ClosedException if closed?
502
+
395
503
  stmt = Statement.new @inner.prepare sql
396
504
 
397
505
  return stmt unless block_given?
@@ -401,7 +509,16 @@ module Libsql
401
509
 
402
510
  def execute_batch(sql) = @inner.execute_batch(sql)
403
511
 
404
- def close = @inner.deinit
512
+ def close
513
+ raise ClosedException if closed?
514
+
515
+ @inner.deinit
516
+ @inner = nil
517
+ end
518
+
519
+ def closed?
520
+ @inner.nil?
521
+ end
405
522
  end
406
523
 
407
524
  class Database
@@ -423,18 +540,31 @@ module Libsql
423
540
  end
424
541
 
425
542
  def sync
543
+ raise ClosedException if closed?
544
+
426
545
  @inner.sync
427
546
  end
428
547
 
429
548
  def connect
549
+ raise ClosedException if closed?
550
+
430
551
  conn = Connection.new @inner.connect
431
552
 
432
- return unless block_given?
553
+ return conn unless block_given?
433
554
 
434
555
  begin yield conn ensure conn.close end
435
556
  end
436
557
 
437
- def close = @inner.deinit
558
+ def close
559
+ raise ClosedException if closed?
560
+
561
+ @inner.deinit
562
+ @inner = nil
563
+ end
564
+
565
+ def closed?
566
+ @inner.nil?
567
+ end
438
568
  end
439
569
  end
440
570
 
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.0
4
+ version: 0.1.1
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,7 +60,7 @@ 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
  - - ">="