stoolap 0.4.0 → 0.4.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: 4759db159d3f737aa354462f4a277c365f96a3f53fe52c986a1b615d177bcd4b
4
- data.tar.gz: cd47c731deaa29d7f447eca2e536de20e1570ff6ca590af188e16ede156c0742
3
+ metadata.gz: b1c26a9bc53e9a804761792da6adb9d151e2acf25abd8e4516a6a279c986efa1
4
+ data.tar.gz: a4ba4b062bc3146a01bd4554c647aef8960b8a1dc42ea586a4d9805d21c3afa2
5
5
  SHA512:
6
- metadata.gz: d4661500c977868a763bc6fc1b4f4b4f9f1a232ed52022dff1bc05bf2fdf4c22d0535d8eb778562005fc31a2fa144e001e057a670d4a92f28346b50ac981b3ea
7
- data.tar.gz: 724605385566e30400dcf2f4a9535ef23aaeaefe098c898892c9e7c9732c2214bc66eb6d1fbb331340e074264ddee6edb6391a7b5ff3fe31455d7a86615f6936
6
+ metadata.gz: 7f5fdab87eab593f4bfb494d8a74b7cac0008a407540c9cf53fea96b375d7cd361e4e9a940383444ed225e3d3f2273a89624fb594ed7c226d04fc2fde44fbdce
7
+ data.tar.gz: be4005d41126b10ad54e86a8b08fad47ef37c201ff91f4dc06a597caf47dfbef3ce30c95367e2ce9962898082045c0bdd97f47b616db5f287d2b4ef82a6b63a7
data/Cargo.lock CHANGED
@@ -1,6 +1,6 @@
1
1
  # This file is automatically @generated by Cargo.
2
2
  # It is not intended for manual editing.
3
- version = 3
3
+ version = 4
4
4
 
5
5
  [[package]]
6
6
  name = "ahash"
@@ -393,6 +393,27 @@ dependencies = [
393
393
  "typenum",
394
394
  ]
395
395
 
396
+ [[package]]
397
+ name = "csv"
398
+ version = "1.4.0"
399
+ source = "registry+https://github.com/rust-lang/crates.io-index"
400
+ checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938"
401
+ dependencies = [
402
+ "csv-core",
403
+ "itoa",
404
+ "ryu",
405
+ "serde_core",
406
+ ]
407
+
408
+ [[package]]
409
+ name = "csv-core"
410
+ version = "0.1.13"
411
+ source = "registry+https://github.com/rust-lang/crates.io-index"
412
+ checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782"
413
+ dependencies = [
414
+ "memchr",
415
+ ]
416
+
396
417
  [[package]]
397
418
  name = "dashmap"
398
419
  version = "6.1.0"
@@ -1125,6 +1146,12 @@ dependencies = [
1125
1146
  "windows-sys 0.60.2",
1126
1147
  ]
1127
1148
 
1149
+ [[package]]
1150
+ name = "ryu"
1151
+ version = "1.0.23"
1152
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1153
+ checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
1154
+
1128
1155
  [[package]]
1129
1156
  name = "scopeguard"
1130
1157
  version = "1.2.0"
@@ -1231,18 +1258,18 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
1231
1258
 
1232
1259
  [[package]]
1233
1260
  name = "stoolap"
1234
- version = "0.4.0"
1261
+ version = "0.4.1"
1235
1262
  dependencies = [
1236
1263
  "chrono",
1237
1264
  "magnus",
1238
- "stoolap 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
1265
+ "stoolap 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
1239
1266
  ]
1240
1267
 
1241
1268
  [[package]]
1242
1269
  name = "stoolap"
1243
- version = "0.4.0"
1270
+ version = "0.4.1"
1244
1271
  source = "registry+https://github.com/rust-lang/crates.io-index"
1245
- checksum = "420d8bd65519e56f55a9f13a891a373b1cda74ebc49a65a35dc4f2efe4441b40"
1272
+ checksum = "a7ebe4615116d74154a6b36d1699793ae43af7c7a7a78739458f99f678456f9e"
1246
1273
  dependencies = [
1247
1274
  "ahash",
1248
1275
  "anyhow",
@@ -1252,6 +1279,7 @@ dependencies = [
1252
1279
  "comfy-table",
1253
1280
  "crc32fast",
1254
1281
  "crossbeam",
1282
+ "csv",
1255
1283
  "dashmap",
1256
1284
  "dirs",
1257
1285
  "getrandom 0.2.17",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "stoolap"
3
- version = "0.4.0"
3
+ version = "0.4.1"
4
4
  edition = "2021"
5
5
  authors = ["Stoolap Contributors"]
6
6
  license = "Apache-2.0"
@@ -14,7 +14,7 @@ name = "stoolap"
14
14
  crate-type = ["cdylib"]
15
15
 
16
16
  [dependencies]
17
- stoolap = "0.4.0"
17
+ stoolap = "0.4.1"
18
18
  magnus = "0.8"
19
19
  chrono = "0.4"
20
20
 
@@ -72,10 +72,6 @@ impl PreparedStatement {
72
72
  &self.plan
73
73
  }
74
74
 
75
- pub(crate) fn sql_text(&self) -> &str {
76
- &self.sql_text
77
- }
78
-
79
75
  /// Return the cached column-key array, creating it from `rows.columns()`
80
76
  /// on first call. The returned `RArray` is rooted through this struct's
81
77
  /// `mark` callback and is safe to hold across subsequent Ruby calls.
@@ -139,58 +139,60 @@ impl Transaction {
139
139
  }
140
140
 
141
141
  /// Execute a prepared statement within the transaction. Returns rows affected.
142
- ///
143
- /// Note: named parameters fall back to `tx.execute_named` which reparses
144
- /// the SQL, because stoolap's `Transaction::execute_prepared` only
145
- /// accepts positional `Params` and the AST encodes `:name` references
146
- /// that cannot be resolved through positional indexing. Use positional
147
- /// `$1, $2` params for the full prepared fast path.
148
142
  pub fn execute_prepared(&self, args: &[Value]) -> Result<i64, Error> {
149
- let (plan, sql, params) = parse_stmt_args(args)?;
143
+ let (plan, params) = parse_stmt_args(args)?;
150
144
  let bind = parse_params(params)?;
151
145
  self.with_tx(|tx| match bind {
152
146
  BindParams::Positional(p) => tx
153
147
  .execute_prepared(plan.statement.as_ref(), p)
154
148
  .map_err(to_magnus),
155
- BindParams::Named(n) => tx.execute_named(&sql, n).map_err(to_magnus),
149
+ BindParams::Named(n) => tx
150
+ .execute_prepared_named(plan.statement.as_ref(), n)
151
+ .map_err(to_magnus),
156
152
  })
157
153
  }
158
154
 
159
155
  /// Query rows using a prepared statement. Returns Array of Hashes.
160
156
  pub fn query_prepared(&self, args: &[Value]) -> Result<RArray, Error> {
161
- let (plan, sql, params) = parse_stmt_args(args)?;
157
+ let (plan, params) = parse_stmt_args(args)?;
162
158
  let bind = parse_params(params)?;
163
159
  let rows = self.with_tx(|tx| match bind {
164
160
  BindParams::Positional(p) => tx
165
161
  .query_prepared(plan.statement.as_ref(), p)
166
162
  .map_err(to_magnus),
167
- BindParams::Named(n) => tx.query_named(&sql, n).map_err(to_magnus),
163
+ BindParams::Named(n) => tx
164
+ .query_prepared_named(plan.statement.as_ref(), n)
165
+ .map_err(to_magnus),
168
166
  })?;
169
167
  rows_to_hashes(rows)
170
168
  }
171
169
 
172
170
  /// Query a single row using a prepared statement. Returns Hash or nil.
173
171
  pub fn query_one_prepared(&self, args: &[Value]) -> Result<Value, Error> {
174
- let (plan, sql, params) = parse_stmt_args(args)?;
172
+ let (plan, params) = parse_stmt_args(args)?;
175
173
  let bind = parse_params(params)?;
176
174
  let rows = self.with_tx(|tx| match bind {
177
175
  BindParams::Positional(p) => tx
178
176
  .query_prepared(plan.statement.as_ref(), p)
179
177
  .map_err(to_magnus),
180
- BindParams::Named(n) => tx.query_named(&sql, n).map_err(to_magnus),
178
+ BindParams::Named(n) => tx
179
+ .query_prepared_named(plan.statement.as_ref(), n)
180
+ .map_err(to_magnus),
181
181
  })?;
182
182
  first_row_to_hash(rows)
183
183
  }
184
184
 
185
185
  /// Query rows using a prepared statement in raw format.
186
186
  pub fn query_raw_prepared(&self, args: &[Value]) -> Result<RHash, Error> {
187
- let (plan, sql, params) = parse_stmt_args(args)?;
187
+ let (plan, params) = parse_stmt_args(args)?;
188
188
  let bind = parse_params(params)?;
189
189
  let rows = self.with_tx(|tx| match bind {
190
190
  BindParams::Positional(p) => tx
191
191
  .query_prepared(plan.statement.as_ref(), p)
192
192
  .map_err(to_magnus),
193
- BindParams::Named(n) => tx.query_named(&sql, n).map_err(to_magnus),
193
+ BindParams::Named(n) => tx
194
+ .query_prepared_named(plan.statement.as_ref(), n)
195
+ .map_err(to_magnus),
194
196
  })?;
195
197
  rows_to_raw(rows)
196
198
  }
@@ -234,13 +236,9 @@ fn parse_sql_args(args: &[Value]) -> Result<(String, Option<Value>), Error> {
234
236
  Ok((scanned.required.0, scanned.optional.0))
235
237
  }
236
238
 
237
- fn parse_stmt_args(args: &[Value]) -> Result<(CachedPlanRef, String, Option<Value>), Error> {
239
+ fn parse_stmt_args(args: &[Value]) -> Result<(CachedPlanRef, Option<Value>), Error> {
238
240
  use magnus::TryConvert;
239
241
  let scanned = scan_args::<(Value,), (Option<Value>,), (), (), (), ()>(args)?;
240
242
  let stmt: &PreparedStatement = TryConvert::try_convert(scanned.required.0)?;
241
- Ok((
242
- stmt.plan().clone(),
243
- stmt.sql_text().to_string(),
244
- scanned.optional.0,
245
- ))
243
+ Ok((stmt.plan().clone(), scanned.optional.0))
246
244
  }
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Stoolap
4
- VERSION = "0.4.0"
4
+ VERSION = "0.4.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stoolap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stoolap Contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-04-10 00:00:00.000000000 Z
11
+ date: 2026-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rb_sys