MCPcopy Create free account
hub / github.com/f0rr0/oliphaunt / vector_extension_direct_smoke

Function vector_extension_direct_smoke

tests/extensions_smoke.rs:139–225  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

137
138#[test]
139fn vector_extension_direct_smoke() -> Result<()> {
140 let _trace = TestTrace::new("vector_extension_direct_smoke");
141 let mut db = Pglite::builder()
142 .temporary()
143 .extension(extensions::VECTOR)
144 .open()?;
145
146 db.exec("CREATE TEMP TABLE oxide_vec (embedding vector(3))", None)?;
147 db.exec("INSERT INTO oxide_vec VALUES ('[1,2,3]')", None)?;
148 let result = db.query(
149 "SELECT embedding <-> '[1,2,4]'::vector AS distance FROM oxide_vec",
150 &[],
151 None,
152 )?;
153 assert_eq!(first_f64(&result, "distance"), 1.0);
154
155 let version = db.query(
156 "SELECT extversion, n.nspname AS schema_name \
157 FROM pg_extension e \
158 JOIN pg_namespace n ON n.oid = e.extnamespace \
159 WHERE e.extname = 'vector'",
160 &[],
161 None,
162 )?;
163 let extversion = version.rows[0]["extversion"]
164 .as_str()
165 .expect("vector extversion");
166 assert!(!extversion.is_empty());
167 assert_eq!(version.rows[0]["schema_name"], json!("pg_catalog"));
168
169 trace_expected("vector_direct division-by-zero");
170 let err = db
171 .query(
172 "SELECT 10 / $1::int4 AS impossible_after_vector",
173 &[serde_json::json!(0)],
174 None,
175 )
176 .expect_err("division by zero after vector load should fail");
177 assert_pglite_code(&err, "22012", "division by zero");
178 let recovered = db.query("SELECT 13::int AS recovered_after_vector_error", &[], None)?;
179 assert_eq!(recovered.rows[0]["recovered_after_vector_error"], json!(13));
180
181 trace_expected("vector_direct invalid-vector-literal");
182 let invalid_vector = db
183 .query(
184 "SELECT $1::vector AS embedding",
185 &[json!("[hello,1]")],
186 None,
187 )
188 .expect_err("invalid vector literal should fail inside the vector extension");
189 assert_pglite_code(
190 &invalid_vector,
191 "22P02",
192 "invalid input syntax for type vector",
193 );
194 let recovered = db.query(
195 "SELECT 15::int AS recovered_after_invalid_vector",
196 &[],

Callers

nothing calls this directly

Calls 8

trace_expectedFunction · 0.85
assert_pglite_codeFunction · 0.85
execMethod · 0.80
openMethod · 0.45
extensionMethod · 0.45
temporaryMethod · 0.45
queryMethod · 0.45
closeMethod · 0.45

Tested by

no test coverage detected