Commit Graph

3059 Commits

Author SHA1 Message Date
Pekka Enberg
277f0e75cd Merge 'Initial pass on vector extension' from Pekka Enberg
This pull requests adds some libSQL vector extension functions such as
`vector()` and `vector_distance_cos()`, which can be used for exact
nearest neighbor search as follows:
```
limbo> SELECT embedding, vector_distance_cos(embedding, '[9, 9, 9]')
   ...> FROM movies ORDER BY vector_distance_cos(embedding, '[9, 9, 9]');
[4, 5, 6]|0.013072490692138672
[1, 2, 3]|0.07417994737625122
```
Note that libSQL also support approximate nearest neighbour search with
DiskANN indexing, which is something we eventually want to port to Limbo
as well.

Closes #798
2025-01-29 09:43:04 +02:00
김선우
9fd2c67b4d Add tests for out of bound access to arrays 2025-01-29 12:04:07 +09:00
김선우
7fe5ba84c7 Fix test that uses wrong data types 2025-01-29 11:59:42 +09:00
김선우
3649e8f67c Add test to verify behavior on null columns 2025-01-29 11:56:49 +09:00
김선우
041c8fbddc Fix executeQuery to not run statement.execute() 2025-01-29 11:53:44 +09:00
김선우
2e62abe6df Implement basic getXX methods for JDBC4ResultSet 2025-01-29 11:41:56 +09:00
Glauber Costa
8f24d18ad8 implement sqlite_source_id function 2025-01-28 14:55:38 -05:00
Glauber Costa
cd58d6c37e update COMPAT matrix for journal_mod pragma
it seems like it is supported now
2025-01-28 14:04:23 -05:00
Glauber Costa
bf1cfe3a1d avoid potentially expensive operations on prepare, query, execute
This simple patch makes sure we can operate with a reference to the
string instead of being forced to transform it to a string, and makes
sure that the Arc doesn't have to be cloned (which can be expensive in
multi-core systems).

This doesn't really make a large difference in benchmarks, given how
expensive Parse::new() is.
2025-01-28 13:44:34 -05:00
PThorpe92
bf6b80edab Continue progress go database/sql driver, add tests and CI 2025-01-28 11:24:57 -05:00
Jussi Saurio
c950b177aa Add test for property: vector -> text -> vector produces an equal vector 2025-01-28 16:09:48 +02:00
Jussi Saurio
e01555467f Add quickcheck property tests for vector extension 2025-01-28 15:53:11 +02:00
Pekka Enberg
ac188808b6 Update README.md 2025-01-28 14:37:50 +02:00
Pekka Enberg
a9d2ef3878 Update COMPAT.md 2025-01-28 14:26:09 +02:00
Pekka Enberg
b9c89e79c2 testing: Add few TCL tests for vector extensions 2025-01-28 14:24:09 +02:00
Pekka Enberg
ee05ad172b core: Bundle vector extension by default 2025-01-28 14:24:09 +02:00
Pekka Enberg
9462426685 Vector extension functions
This patch adds some libSQL vector extension functions such as
`vector()` and `vector_distance_cos()`, which can be used for exact
nearest neighbor search as follows:

```
limbo> SELECT embedding, vector_distance_cos(embedding, '[9, 9, 9]')
   ...> FROM movies ORDER BY vector_distance_cos(embedding, '[9, 9, 9]');
[4, 5, 6]|0.013072490692138672
[1, 2, 3]|0.07417994737625122
```
2025-01-28 14:24:09 +02:00
Pekka Enberg
0eedea0bdb Merge 'Fix panic when double quoted strings are used for column names.' from Krishna Vishal
Now:
```sql
limbo> create table t (a,b,c); insert into t (a,b,c) values ("hello", 234, 432);
thread 'main' panicked at core/translate/expr.rs:1621:29:
internal error: entered unreachable code: Id should be resolved to a Column before translation
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
```
After fix:
```sql
limbo> create table t (a,b,c); insert into t (a,b,c) values ("hello", 234, 432);

  × Parse error: no such column: "hello" - should this be a string literal in single-quotes?

limbo>
```
Closes #800

Reviewed-by: Diego Reis (@diegoreis42)
Reviewed-by: Preston Thorpe (@PThorpe92)

Closes #801
2025-01-28 14:20:58 +02:00
Pekka Enberg
d164ad1035 Merge 'Improve docs' from Sonny
Improving docs
1. adding journaling modes in compat
2. reformat the tables in compat
3. adding ref resources for DST

Closes #804
2025-01-28 14:19:18 +02:00
Pekka Enberg
3baca19f75 Merge 'bindings/java: Implement close() for LimboStatement and LimboResultSet ' from Kim Seon Woo
## Purpose of this PR
- Implement `close()` method for `LimboStatement`(+`JDBC4Statement`) and
`LimboResultSet`(+ `JDBC4ResultSet`)
## Changes
- Add `consumeAll` method in `LimboResultSet`
- Implement `close()` methods
  - Because  `JDBC4Statement` has longer lifecycle in compared to
`LimboStatement`, we manage different `close` fields(`LimboStatement` is
created when first `execute` method is called on `JDBC4Statemenet`)
## Reference
- [Issue](https://github.com/tursodatabase/limbo/issues/615)

Closes #799
2025-01-28 14:18:01 +02:00
Pekka Enberg
810ad77951 Merge 'bindings/java: Add README.md for bindings/java' from Kim Seon Woo
## Purpose of thie PR
- Add README.md for bindings/java
## Reference
- https://github.com/tursodatabase/limbo/issues/615

Closes #802
2025-01-28 14:17:47 +02:00
sonhmai
f59379e0c9 fix wrong replacement in compat 2025-01-28 11:35:49 +07:00
sonhmai
d4e5f83932 add references for dst 2025-01-28 11:32:17 +07:00
sonhmai
fc4192362d add journaling modes to compat 2025-01-28 11:13:37 +07:00
PThorpe92
793cdf8bad Fix memory issues, make extension types more efficient 2025-01-27 22:30:31 -05:00
김선우
55a7cd230e Add README.md for bindings/java 2025-01-28 10:48:44 +09:00
김선우
b17511b559 Fix test to use lighter query 2025-01-28 09:25:57 +09:00
김선우
a82c459ed0 Implement close on LimboStatement and JDBC4Statement independently 2025-01-28 09:20:07 +09:00
Krishna Vishal
61d60cf4b7 Fix panic when double quoted strings are used for column names in SQL statements. Double quoted strings are not supported in SQLite. Fixes https://github.com/tursodatabase/limbo/issues/800 2025-01-27 23:15:04 +05:30
pedrocarlo
01626f9355 cleanup of some TODOs 2025-01-27 12:23:59 -03:00
pedrocarlo
75e78a6c70 cargo clippy 2025-01-27 12:20:13 -03:00
Pekka Enberg
ad8e05b9a1 Merge 'bindings/java: Implement LimboConnection close() ' from Kim Seon Woo
## Purpose of thie PR
- Implement `close()` method for `LimboConnection` and `JDBC4Connection`
## Changes
- Instead of closing the database when closing connections, close the
connection instead
## References
- https://github.com/tursodatabase/limbo/issues/615

Closes #797
2025-01-27 14:51:04 +02:00
김선우
eeed305b07 Nit 2025-01-27 20:40:43 +09:00
김선우
c18418bed0 Nit 2025-01-27 20:35:11 +09:00
김선우
e48d7aa763 Add consumeAll method in LimboResultSet and let JDBC4Statement to use it 2025-01-27 20:31:37 +09:00
김선우
4dd2d1c64a Implement close() on LimboStatement 2025-01-27 20:20:10 +09:00
김선우
6252947232 Fix the logic on determining whether connection is closed 2025-01-27 19:49:10 +09:00
김선우
1125e51a59 Add test for close() 2025-01-27 19:19:34 +09:00
김선우
dae15ef0e3 Implement limbo close() 2025-01-27 19:15:02 +09:00
Pekka Enberg
ef6a1be335 Merge 'Enable static linking for 'built-in' extensions' from Preston Thorpe
This PR introduces the ability to build and link with an extension
library, enabling features like `uuid` to not have to be shipped as
independent libraries and loaded at runtime.
To build and link with an extension, you simply add it as a dependency
with the `static` feature, and call register_extension_static. in this
case, we feature flag that with `uuid`
```rust
    #[cfg(feature = "uuid")]
    pub fn register_uuid(&self) -> Result<(), String> {
        let ext_api = Box::new(self.build_limbo_ext());
        if unsafe { !limbo_uuid::register_extension_static(&ext_api).is_ok() } {
            return Err("Failed to register uuid extension".to_string());
        }
        Ok(())
    }
```
So fortunately wasm targets are no longer excluded from extensions, only
loading them at runtime for now

Closes #737
2025-01-27 09:49:48 +02:00
Pekka Enberg
e8600fa2a1 Merge branch 'main' into static 2025-01-27 09:49:34 +02:00
Pekka Enberg
5a1e1f690a Merge 'bindings/java: Log driver loading error' from Pekka Enberg
Reviewed-by: Kim Seon Woo (@seonWKim)

Closes #791
2025-01-27 09:09:03 +02:00
pedrocarlo
97c716524b cargo fmt and clippy 2025-01-26 20:51:14 -03:00
pedrocarlo
515e281480 implement noop 2025-01-26 20:49:23 -03:00
alpaylan
f5139f086e add select-limit property 2025-01-27 01:24:20 +03:00
ben594
847617df63 Created TCL tests for select queries with offset 2025-01-26 16:40:30 -05:00
ben594
54a6505b33 Handle negative limits and offsets 2025-01-26 16:40:30 -05:00
ben594
983fe4c151 Emit Integer, OffsetLimit instructions, and emit IfPos instruction to
skip rows

Emit Integer, OffsetLimit instructions for offset, and define function to emit IfPosinstruction to skip rows

Emit IfPos instructions to handle offset for simple select

Emit IfPos to handle offset for select with order by

Moved repeated emit_offset function call into emit_select_result
2025-01-26 16:40:30 -05:00
ben594
0ff4389eea Add registers for offset and sum of limit and offset 2025-01-26 16:40:30 -05:00
ben594
d03a0dbd39 Added parsing of offset clause 2025-01-26 16:40:30 -05:00