mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-01 06:27:03 +03:00
Add a few more tests for Fts5ExtensionApi methods.
FossilOrigin-Name: 4ce2a7e8ed0f2859efc1038fd0812bc2b667be1479f45c081deccc2cf188c807
This commit is contained in:
@ -129,22 +129,16 @@ public class TesterFts5 {
|
|||||||
do_execsql_test(db, sql, "[]");
|
do_execsql_test(db, sql, "[]");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Test of the Fts5ExtensionApi.xRowid() API. */
|
/*
|
||||||
private static void test_rowid(){
|
** Create the following custom SQL functions:
|
||||||
|
**
|
||||||
/* Open db and populate an fts5 table */
|
** fts5_rowid()
|
||||||
sqlite3 db = createNewDb();
|
** fts5_columncount()
|
||||||
do_execsql_test(db,
|
*/
|
||||||
"CREATE VIRTUAL TABLE ft USING fts5(a, b);" +
|
private static void create_test_functions(sqlite3 db){
|
||||||
"INSERT INTO ft(rowid, a, b) VALUES(1, 'x y z', 'x y z');" +
|
/*
|
||||||
"INSERT INTO ft(rowid, a, b) VALUES(2, 'x y z', 'x y z');" +
|
** A user-defined-function fts5_rowid() that uses xRowid()
|
||||||
"INSERT INTO ft(rowid, a, b) VALUES(-9223372036854775808, 'x', 'x');" +
|
*/
|
||||||
"INSERT INTO ft(rowid, a, b) VALUES(0, 'x', 'x');" +
|
|
||||||
"INSERT INTO ft(rowid, a, b) VALUES(9223372036854775807, 'x', 'x');" +
|
|
||||||
"INSERT INTO ft(rowid, a, b) VALUES(3, 'x y z', 'x y z');"
|
|
||||||
);
|
|
||||||
|
|
||||||
/* Create a user-defined-function fts5_rowid() that uses xRowid() */
|
|
||||||
fts5_extension_function fts5_rowid = new fts5_extension_function(){
|
fts5_extension_function fts5_rowid = new fts5_extension_function(){
|
||||||
@Override public void call(
|
@Override public void call(
|
||||||
Fts5ExtensionApi ext,
|
Fts5ExtensionApi ext,
|
||||||
@ -157,7 +151,126 @@ public class TesterFts5 {
|
|||||||
}
|
}
|
||||||
public void xDestroy(){ }
|
public void xDestroy(){ }
|
||||||
};
|
};
|
||||||
fts5_api.getInstanceForDb(db).xCreateFunction("fts5_rowid", fts5_rowid);
|
|
||||||
|
/*
|
||||||
|
** fts5_columncount() - xColumnCount()
|
||||||
|
*/
|
||||||
|
fts5_extension_function fts5_columncount = new fts5_extension_function(){
|
||||||
|
@Override public void call(
|
||||||
|
Fts5ExtensionApi ext,
|
||||||
|
Fts5Context fCx,
|
||||||
|
sqlite3_context pCx,
|
||||||
|
sqlite3_value argv[]
|
||||||
|
){
|
||||||
|
int nCol = ext.xColumnCount(fCx);
|
||||||
|
sqlite3_result_int(pCx, nCol);
|
||||||
|
}
|
||||||
|
public void xDestroy(){ }
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
** fts5_columnsize() - xColumnSize()
|
||||||
|
*/
|
||||||
|
fts5_extension_function fts5_columnsize = new fts5_extension_function(){
|
||||||
|
@Override public void call(
|
||||||
|
Fts5ExtensionApi ext,
|
||||||
|
Fts5Context fCx,
|
||||||
|
sqlite3_context pCx,
|
||||||
|
sqlite3_value argv[]
|
||||||
|
){
|
||||||
|
if( argv.length!=1 ){
|
||||||
|
throw new RuntimeException("fts5_columncount: wrong number of args");
|
||||||
|
}
|
||||||
|
int iCol = sqlite3_value_int(argv[0]);
|
||||||
|
|
||||||
|
OutputPointer.Int32 piSz = new OutputPointer.Int32();
|
||||||
|
int rc = ext.xColumnSize(fCx, iCol, piSz);
|
||||||
|
if( rc!=SQLITE_OK ){
|
||||||
|
throw new RuntimeException( sqlite3_errstr(rc) );
|
||||||
|
}
|
||||||
|
sqlite3_result_int(pCx, piSz.get());
|
||||||
|
}
|
||||||
|
public void xDestroy(){ }
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
** fts5_columntext() - xColumnText()
|
||||||
|
*/
|
||||||
|
fts5_extension_function fts5_columntext = new fts5_extension_function(){
|
||||||
|
@Override public void call(
|
||||||
|
Fts5ExtensionApi ext,
|
||||||
|
Fts5Context fCx,
|
||||||
|
sqlite3_context pCx,
|
||||||
|
sqlite3_value argv[]
|
||||||
|
){
|
||||||
|
if( argv.length!=1 ){
|
||||||
|
throw new RuntimeException("fts5_columntext: wrong number of args");
|
||||||
|
}
|
||||||
|
int iCol = sqlite3_value_int(argv[0]);
|
||||||
|
|
||||||
|
OutputPointer.String pzText = new OutputPointer.String();
|
||||||
|
int rc = ext.xColumnText(fCx, iCol, pzText);
|
||||||
|
if( rc!=SQLITE_OK ){
|
||||||
|
throw new RuntimeException( sqlite3_errstr(rc) );
|
||||||
|
}
|
||||||
|
sqlite3_result_text16(pCx, pzText.get());
|
||||||
|
}
|
||||||
|
public void xDestroy(){ }
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
** fts5_columntotalsize() - xColumnTotalSize()
|
||||||
|
*/
|
||||||
|
fts5_extension_function fts5_columntsize = new fts5_extension_function(){
|
||||||
|
@Override public void call(
|
||||||
|
Fts5ExtensionApi ext,
|
||||||
|
Fts5Context fCx,
|
||||||
|
sqlite3_context pCx,
|
||||||
|
sqlite3_value argv[]
|
||||||
|
){
|
||||||
|
if( argv.length!=1 ){
|
||||||
|
throw new RuntimeException(
|
||||||
|
"fts5_columntotalsize: wrong number of args"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
int iCol = sqlite3_value_int(argv[0]);
|
||||||
|
|
||||||
|
OutputPointer.Int64 piSz = new OutputPointer.Int64();
|
||||||
|
int rc = ext.xColumnTotalSize(fCx, iCol, piSz);
|
||||||
|
if( rc!=SQLITE_OK ){
|
||||||
|
throw new RuntimeException( sqlite3_errstr(rc) );
|
||||||
|
}
|
||||||
|
sqlite3_result_int64(pCx, piSz.get());
|
||||||
|
}
|
||||||
|
public void xDestroy(){ }
|
||||||
|
};
|
||||||
|
|
||||||
|
fts5_api api = fts5_api.getInstanceForDb(db);
|
||||||
|
api.xCreateFunction("fts5_rowid", fts5_rowid);
|
||||||
|
api.xCreateFunction("fts5_columncount", fts5_columncount);
|
||||||
|
api.xCreateFunction("fts5_columnsize", fts5_columnsize);
|
||||||
|
api.xCreateFunction("fts5_columntext", fts5_columntext);
|
||||||
|
api.xCreateFunction("fts5_columntotalsize", fts5_columntsize);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Test of various Fts5ExtensionApi methods
|
||||||
|
*/
|
||||||
|
private static void test2(){
|
||||||
|
|
||||||
|
/* Open db and populate an fts5 table */
|
||||||
|
sqlite3 db = createNewDb();
|
||||||
|
do_execsql_test(db,
|
||||||
|
"CREATE VIRTUAL TABLE ft USING fts5(a, b);" +
|
||||||
|
"INSERT INTO ft(rowid, a, b) VALUES(-9223372036854775808, 'x', 'x');" +
|
||||||
|
"INSERT INTO ft(rowid, a, b) VALUES(0, 'x', 'x');" +
|
||||||
|
"INSERT INTO ft(rowid, a, b) VALUES(1, 'x y z', 'x y z');" +
|
||||||
|
"INSERT INTO ft(rowid, a, b) VALUES(2, 'x y z', 'x z');" +
|
||||||
|
"INSERT INTO ft(rowid, a, b) VALUES(3, 'x y z', 'x y z');" +
|
||||||
|
"INSERT INTO ft(rowid, a, b) VALUES(9223372036854775807, 'x', 'x');"
|
||||||
|
);
|
||||||
|
|
||||||
|
create_test_functions(db);
|
||||||
|
|
||||||
/* Test that fts5_rowid() seems to work */
|
/* Test that fts5_rowid() seems to work */
|
||||||
do_execsql_test(db,
|
do_execsql_test(db,
|
||||||
@ -165,12 +278,80 @@ public class TesterFts5 {
|
|||||||
"[1, 1, 1, 1, 1, 1]"
|
"[1, 1, 1, 1, 1, 1]"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/* Test fts5_columncount() */
|
||||||
|
do_execsql_test(db,
|
||||||
|
"SELECT fts5_columncount(ft) FROM ft('x')",
|
||||||
|
"[2, 2, 2, 2, 2, 2]"
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Test fts5_columnsize() */
|
||||||
|
do_execsql_test(db,
|
||||||
|
"SELECT fts5_columnsize(ft, 0) FROM ft('x') ORDER BY rowid",
|
||||||
|
"[1, 1, 3, 3, 3, 1]"
|
||||||
|
);
|
||||||
|
do_execsql_test(db,
|
||||||
|
"SELECT fts5_columnsize(ft, 1) FROM ft('x') ORDER BY rowid",
|
||||||
|
"[1, 1, 3, 2, 3, 1]"
|
||||||
|
);
|
||||||
|
do_execsql_test(db,
|
||||||
|
"SELECT fts5_columnsize(ft, -1) FROM ft('x') ORDER BY rowid",
|
||||||
|
"[2, 2, 6, 5, 6, 2]"
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Test that xColumnSize() returns SQLITE_RANGE if the column number
|
||||||
|
** is out-of range */
|
||||||
|
try {
|
||||||
|
do_execsql_test(db,
|
||||||
|
"SELECT fts5_columnsize(ft, 2) FROM ft('x') ORDER BY rowid"
|
||||||
|
);
|
||||||
|
} catch( RuntimeException e ){
|
||||||
|
affirm( e.getMessage().matches(".*column index out of range") );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test fts5_columntext() */
|
||||||
|
do_execsql_test(db,
|
||||||
|
"SELECT fts5_columntext(ft, 0) FROM ft('x') ORDER BY rowid",
|
||||||
|
"[x, x, x y z, x y z, x y z, x]"
|
||||||
|
);
|
||||||
|
do_execsql_test(db,
|
||||||
|
"SELECT fts5_columntext(ft, 1) FROM ft('x') ORDER BY rowid",
|
||||||
|
"[x, x, x y z, x z, x y z, x]"
|
||||||
|
);
|
||||||
|
do_execsql_test(db,
|
||||||
|
"SELECT fts5_columntext(ft, 2) FROM ft('x') ORDER BY rowid",
|
||||||
|
"[null, null, null, null, null, null]"
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Test fts5_columntotalsize() */
|
||||||
|
do_execsql_test(db,
|
||||||
|
"SELECT fts5_columntotalsize(ft, 0) FROM ft('x') ORDER BY rowid",
|
||||||
|
"[12, 12, 12, 12, 12, 12]"
|
||||||
|
);
|
||||||
|
do_execsql_test(db,
|
||||||
|
"SELECT fts5_columntotalsize(ft, 1) FROM ft('x') ORDER BY rowid",
|
||||||
|
"[11, 11, 11, 11, 11, 11]"
|
||||||
|
);
|
||||||
|
do_execsql_test(db,
|
||||||
|
"SELECT fts5_columntotalsize(ft, -1) FROM ft('x') ORDER BY rowid",
|
||||||
|
"[23, 23, 23, 23, 23, 23]"
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Test that xColumnTotalSize() returns SQLITE_RANGE if the column
|
||||||
|
** number is out-of range */
|
||||||
|
try {
|
||||||
|
do_execsql_test(db,
|
||||||
|
"SELECT fts5_columntotalsize(ft, 2) FROM ft('x') ORDER BY rowid"
|
||||||
|
);
|
||||||
|
} catch( RuntimeException e ){
|
||||||
|
affirm( e.getMessage().matches(".*column index out of range") );
|
||||||
|
}
|
||||||
|
|
||||||
sqlite3_close_v2(db);
|
sqlite3_close_v2(db);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static synchronized void runTests(){
|
private static synchronized void runTests(){
|
||||||
test1();
|
test1();
|
||||||
test_rowid();
|
test2();
|
||||||
}
|
}
|
||||||
|
|
||||||
public TesterFts5(){
|
public TesterFts5(){
|
||||||
|
12
manifest
12
manifest
@ -1,5 +1,5 @@
|
|||||||
C Add\sa\stest\sfor\sthe\sjava\sversion\sof\sFts5ExtensionApi.xRowid().
|
C Add\sa\sfew\smore\stests\sfor\sFts5ExtensionApi\smethods.
|
||||||
D 2023-09-14T17:42:34.413
|
D 2023-09-14T20:01:18.573
|
||||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||||
@ -276,7 +276,7 @@ F ext/jni/src/org/sqlite/jni/fts5/Fts5Context.java 7058da97059b8e156c17561a47ecd
|
|||||||
F ext/jni/src/org/sqlite/jni/fts5/Fts5ExtensionApi.java 3c337e5690c4de7f0d5478f53ca7ba326e776330eb511e607bd252a35b84d8f7
|
F ext/jni/src/org/sqlite/jni/fts5/Fts5ExtensionApi.java 3c337e5690c4de7f0d5478f53ca7ba326e776330eb511e607bd252a35b84d8f7
|
||||||
F ext/jni/src/org/sqlite/jni/fts5/Fts5PhraseIter.java 2a7f3d76a1206e6a43d4c4ed9609b294d5431cc7d8fb875d8419f76efa6e56dc
|
F ext/jni/src/org/sqlite/jni/fts5/Fts5PhraseIter.java 2a7f3d76a1206e6a43d4c4ed9609b294d5431cc7d8fb875d8419f76efa6e56dc
|
||||||
F ext/jni/src/org/sqlite/jni/fts5/Fts5Tokenizer.java cc9a53846a168a215238af224c31cef0e8379780e36e8a5e743b00c08145cf19
|
F ext/jni/src/org/sqlite/jni/fts5/Fts5Tokenizer.java cc9a53846a168a215238af224c31cef0e8379780e36e8a5e743b00c08145cf19
|
||||||
F ext/jni/src/org/sqlite/jni/fts5/TesterFts5.java 396db36cb40ffced7c6c5e2e7e6ea7427d83d2844eada88aa3d880ff6e5657c3
|
F ext/jni/src/org/sqlite/jni/fts5/TesterFts5.java 3e78baa14a8df78e6dedbf714d82d223ca7327aa348de2fd84ee04ce60c2ea3f
|
||||||
F ext/jni/src/org/sqlite/jni/fts5/fts5_api.java 6071bf76c2c6a0f035b99adc76715b0324f540a441452b4ff6b94d9360a6a83d
|
F ext/jni/src/org/sqlite/jni/fts5/fts5_api.java 6071bf76c2c6a0f035b99adc76715b0324f540a441452b4ff6b94d9360a6a83d
|
||||||
F ext/jni/src/org/sqlite/jni/fts5/fts5_extension_function.java 1fe0f5692c1d67475d12b067f0469949073446f18c56eba5ee5da6ddd06db9b9
|
F ext/jni/src/org/sqlite/jni/fts5/fts5_extension_function.java 1fe0f5692c1d67475d12b067f0469949073446f18c56eba5ee5da6ddd06db9b9
|
||||||
F ext/jni/src/org/sqlite/jni/fts5/fts5_tokenizer.java 4b56f407977f08e456ea0c956fb657b4cd96ec4635cc4f7a1b7ef10cb2a21d7d
|
F ext/jni/src/org/sqlite/jni/fts5/fts5_tokenizer.java 4b56f407977f08e456ea0c956fb657b4cd96ec4635cc4f7a1b7ef10cb2a21d7d
|
||||||
@ -2120,8 +2120,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P d88f41b2cf2b721170d2428a50b717976091389d9a07d0ffa15c3323b0eaad37
|
P 227facf879d2ade348cdb51f5b50ba2f95b8621acc0cf7a5fed4a310b4c76baa
|
||||||
R 17d09f9ad646d0c5331613aba4866716
|
R 1281c6c3003290dd0dfc6b7fdb5d17b0
|
||||||
U dan
|
U dan
|
||||||
Z 285b62717956b62258378720d0c572e2
|
Z ecd0a94f4f85e81f4129f42ebb40ff63
|
||||||
# Remove this line to create a well-formed Fossil manifest.
|
# Remove this line to create a well-formed Fossil manifest.
|
||||||
|
@ -1 +1 @@
|
|||||||
227facf879d2ade348cdb51f5b50ba2f95b8621acc0cf7a5fed4a310b4c76baa
|
4ce2a7e8ed0f2859efc1038fd0812bc2b667be1479f45c081deccc2cf188c807
|
Reference in New Issue
Block a user