feat: introduce vector type (#4964)

* feat: introduce vector type

Signed-off-by: Zhenchi <zhongzc_arch@outlook.com>

* test: fix prepared stmt

Signed-off-by: Zhenchi <zhongzc_arch@outlook.com>

* test: add grpc test

Signed-off-by: Zhenchi <zhongzc_arch@outlook.com>

* test: parse vector value

Signed-off-by: Zhenchi <zhongzc_arch@outlook.com>

* test: column to row

Signed-off-by: Zhenchi <zhongzc_arch@outlook.com>

* test: sqlness

Signed-off-by: Zhenchi <zhongzc_arch@outlook.com>

* fix: merge issue

Signed-off-by: Zhenchi <zhongzc_arch@outlook.com>

* refactor: add check for bytes size

Signed-off-by: Zhenchi <zhongzc_arch@outlook.com>

* Update tests/cases/standalone/common/types/vector/vector.sql

Co-authored-by: Ruihang Xia <waynestxia@gmail.com>

* chore: update proto

Signed-off-by: Zhenchi <zhongzc_arch@outlook.com>

* chore: simplify cargo

Signed-off-by: Zhenchi <zhongzc_arch@outlook.com>

* chore: address comment

Signed-off-by: Zhenchi <zhongzc_arch@outlook.com>

---------

Signed-off-by: Zhenchi <zhongzc_arch@outlook.com>
Co-authored-by: Ruihang Xia <waynestxia@gmail.com>
This commit is contained in:
Zhenchi
2024-11-12 08:28:44 +00:00
committed by GitHub
co-authored by Ruihang Xia
parent 84aa5b7b22
commit d616bd92ef
32 changed files with 1109 additions and 120 deletions
@@ -0,0 +1,92 @@
CREATE TABLE t (ts TIMESTAMP TIME INDEX, v VECTOR(3));
Affected Rows: 0
INSERT INTO t VALUES
(1, "[1.0, 2.0, 3.0]"),
(2, "[4.0, 5.0, 6.0]"),
(3, "[7.0, 8.0, 9.0]");
Affected Rows: 3
-- SQLNESS PROTOCOL MYSQL
SELECT * FROM t;
+----------------------------+---------+
| ts | v |
+----------------------------+---------+
| 1970-01-01 00:00:00.001000 | [1,2,3] |
| 1970-01-01 00:00:00.002000 | [4,5,6] |
| 1970-01-01 00:00:00.003000 | [7,8,9] |
+----------------------------+---------+
-- SQLNESS PROTOCOL POSTGRES
SELECT * FROM t;
+----------------------------+-----------+
| ts | v |
+----------------------------+-----------+
| 1970-01-01 00:00:00.001000 | "[1,2,3]" |
| 1970-01-01 00:00:00.002000 | "[4,5,6]" |
| 1970-01-01 00:00:00.003000 | "[7,8,9]" |
+----------------------------+-----------+
-- Unexpected dimension --
INSERT INTO t VALUES
(4, "[1.0]");
Error: 1004(InvalidArguments), Invalid Vector: Failed to parse [1.0] to Vector value: wrong dimension
-- Invalid vector value --
INSERT INTO t VALUES
(5, "1.0,2.0,3.0");
Error: 1004(InvalidArguments), Invalid Vector: Failed to parse 1.0,2.0,3.0 to Vector value: not properly enclosed in brackets
-- Invalid vector value --
INSERT INTO t VALUES
(6, "[30h, 40s, 50m]");
Error: 1004(InvalidArguments), Invalid Vector: Failed to parse [30h, 40s, 50m] to Vector value: elements are not all float32
CREATE TABLE t2 (ts TIMESTAMP TIME INDEX, v VECTOR(3) DEFAULT '[1.0, 2.0, 3.0]');
Affected Rows: 0
INSERT INTO t2 (ts) VALUES
(1),
(2),
(3);
Affected Rows: 3
-- SQLNESS PROTOCOL MYSQL
SELECT * FROM t2;
+----------------------------+---------+
| ts | v |
+----------------------------+---------+
| 1970-01-01 00:00:00.001000 | [1,2,3] |
| 1970-01-01 00:00:00.002000 | [1,2,3] |
| 1970-01-01 00:00:00.003000 | [1,2,3] |
+----------------------------+---------+
-- SQLNESS PROTOCOL POSTGRES
SELECT * FROM t2;
+----------------------------+-----------+
| ts | v |
+----------------------------+-----------+
| 1970-01-01 00:00:00.001000 | "[1,2,3]" |
| 1970-01-01 00:00:00.002000 | "[1,2,3]" |
| 1970-01-01 00:00:00.003000 | "[1,2,3]" |
+----------------------------+-----------+
DROP TABLE t;
Affected Rows: 0
DROP TABLE t2;
Affected Rows: 0
@@ -0,0 +1,41 @@
CREATE TABLE t (ts TIMESTAMP TIME INDEX, v VECTOR(3));
INSERT INTO t VALUES
(1, "[1.0, 2.0, 3.0]"),
(2, "[4.0, 5.0, 6.0]"),
(3, "[7.0, 8.0, 9.0]");
-- SQLNESS PROTOCOL MYSQL
SELECT * FROM t;
-- SQLNESS PROTOCOL POSTGRES
SELECT * FROM t;
-- Unexpected dimension --
INSERT INTO t VALUES
(4, "[1.0]");
-- Invalid vector value --
INSERT INTO t VALUES
(5, "1.0,2.0,3.0");
-- Invalid vector value --
INSERT INTO t VALUES
(6, "[30h, 40s, 50m]");
CREATE TABLE t2 (ts TIMESTAMP TIME INDEX, v VECTOR(3) DEFAULT '[1.0, 2.0, 3.0]');
INSERT INTO t2 (ts) VALUES
(1),
(2),
(3);
-- SQLNESS PROTOCOL MYSQL
SELECT * FROM t2;
-- SQLNESS PROTOCOL POSTGRES
SELECT * FROM t2;
DROP TABLE t;
DROP TABLE t2;