zorba-coders team mailing list archive
-
zorba-coders team
-
Mailing list archive
-
Message #17494
[Merge] lp:~zorba-coders/zorba/sqlite-check-for-metadata-availability into lp:zorba/sqlite-module
Luis Rodriguez Gonzalez has proposed merging lp:~zorba-coders/zorba/sqlite-check-for-metadata-availability into lp:zorba/sqlite-module.
Requested reviews:
Chris Hillery (ceejatec)
Related bugs:
Bug #1102549 in Zorba: "SQLite module doesn't link on MacOS"
https://bugs.launchpad.net/zorba/+bug/1102549
For more details, see:
https://code.launchpad.net/~zorba-coders/zorba/sqlite-check-for-metadata-availability/+merge/145041
- New feature detection code added to CMake to be sure that SQLite is able to read metadata (fix for Mac OSX)
--
https://code.launchpad.net/~zorba-coders/zorba/sqlite-check-for-metadata-availability/+merge/145041
Your team Zorba Coders is subscribed to branch lp:zorba/sqlite-module.
=== modified file 'cmake_modules/FindSQLite3.cmake'
--- cmake_modules/FindSQLite3.cmake 2012-11-20 16:41:36 +0000
+++ cmake_modules/FindSQLite3.cmake 2013-01-25 23:35:26 +0000
@@ -39,8 +39,9 @@
SET(CMAKE_REQUIRED_INCLUDES "${SQLITE_INCLUDE_DIR}")
SET(CMAKE_REQUIRED_LIBRARIES "${SQLITE_LIBRARY}")
-# INCLUDE(CheckFunctionExists)
-# CHECK_FUNCTION_EXISTS(archive_write_zip_set_compression_deflate #ZORBA_LIBARCHIVE_HAVE_SET_COMPRESSION)
+
+ INCLUDE(CheckFunctionExists)
+ CHECK_FUNCTION_EXISTS(sqlite3_column_database_name ZORBA_SQLITE_HAVE_METADATA)
ELSE (SQLITE_INCLUDE_DIR AND SQLITE_LIBRARY)
SET (SQLITE_FOUND 0)
SET (SQLITE_LIBRARIES)
=== modified file 'src/config.h.cmake'
--- src/config.h.cmake 2013-01-24 06:17:00 +0000
+++ src/config.h.cmake 2013-01-25 23:35:26 +0000
@@ -21,5 +21,6 @@
#define ZORBA_SQLITE_CONFIG_H
#cmakedefine SQLITE_WITH_FILE_ACCESS
+#cmakedefine ZORBA_SQLITE_HAVE_METADATA
#endif /* ZORBA_SQLITE_CONFIG_H */
=== modified file 'src/sqlite_module.xq'
--- src/sqlite_module.xq 2013-01-24 06:17:00 +0000
+++ src/sqlite_module.xq 2013-01-25 23:35:26 +0000
@@ -68,6 +68,8 @@
:
: @error s:SQLI0001 if the databse name doesn't exist or it couldn't be opened.
: @error s:SQLI0007 if there is any unknown option specified.
+ : @error s:SQLI0008 if a non-in-memory database is requested and the module
+ : is built without filesystem access
: @error s:SQLI9999 if there was an internal error inside SQLite library.
:)
declare %an:sequential function s:connect(
@@ -173,6 +175,8 @@
: @return a object() with the associated the metadata.
:
: @error s:SQLI0004 if $pstmnt is not a valid SQLite prepared statement.
+ : @error s:SQLI0009 if no metadata is available (SQLite library compiled without
+ : SQLITE_ENABLE_COLUMN_METADATA).
: @error s:SQLI9999 if there was an internal error inside SQLite library.
:)
declare %an:sequential function s:metadata(
=== modified file 'src/sqlite_module.xq.src/sqlite_module.cpp'
--- src/sqlite_module.xq.src/sqlite_module.cpp 2013-01-24 06:17:00 +0000
+++ src/sqlite_module.xq.src/sqlite_module.cpp 2013-01-25 23:35:26 +0000
@@ -573,6 +573,12 @@
return "Only in-memory databases are allowed (Module built without filesystem access)";
}
#endif /* not SQLITE_WITH_FILE_ACCESS */
+#ifndef ZORBA_SQLITE_HAVE_METADATA
+ else if(error == "SQLI0009")
+ {
+ return "Metadata not found (SQLite built without SQLITE_ENABLE_COLUMN_METADATA)";
+ }
+#endif /* not ZORBA_SQLITE_HAVE_METADATA */
else if(error == "SQLI9999")
{
return "Internal error ocurred";
@@ -826,6 +832,7 @@
int lNotNull, lPrimaryKey, lAutoinc, lRc;
if(theRc == SQLITE_ROW){
+#ifdef ZORBA_SQLITE_HAVE_METADATA
// Get the metadata for 'theActualColumn' column
// in a key = value fashion
lDbHandle = sqlite3_db_handle(theStmt);
@@ -867,6 +874,7 @@
aKey = theFactory->createString("autoincrement");
aValue = theFactory->createBoolean((lAutoinc==0)?false:true);
elements.push_back(std::pair<zorba::Item, zorba::Item>(aKey, aValue));
+#endif
aItem = theFactory->createJSONObject(elements);
elements.clear();
// Get more data if available
@@ -1068,6 +1076,7 @@
const zorba::StaticContext* aSctx,
const zorba::DynamicContext* aDctx) const
{
+#ifdef ZORBA_SQLITE_HAVE_METADATA
sqlite3_stmt *lPstmt;
zorba::Item lItemPstmt = getOneItem(aArgs, 0);
zorba::Item lVecItem, lJSONKey, lJSONArray, lJSONRes;
@@ -1101,6 +1110,9 @@
lJSONRes = lFactory->createJSONObject(lVectorRes);
return ItemSequence_t(new SingletonItemSequence(lJSONRes));
+#else
+ throwError("SQLI0008", getErrorMessage("SQLI0008"));
+#endif
}
/*******************************************************************************
=== added file 'test/Queries/test3.spec'
--- test/Queries/test3.spec 1970-01-01 00:00:00 +0000
+++ test/Queries/test3.spec 2013-01-25 23:35:26 +0000
@@ -0,0 +1,1 @@
+Error: http://www.zorba-xquery.com/modules/sqlite:SQLI0009
=== added file 'test/Queries/test4.spec'
--- test/Queries/test4.spec 1970-01-01 00:00:00 +0000
+++ test/Queries/test4.spec 2013-01-25 23:35:26 +0000
@@ -0,0 +1,1 @@
+Error: http://www.zorba-xquery.com/modules/sqlite:SQLI0009
=== added file 'test/Queries/test5.spec'
--- test/Queries/test5.spec 1970-01-01 00:00:00 +0000
+++ test/Queries/test5.spec 2013-01-25 23:35:26 +0000
@@ -0,0 +1,1 @@
+Error: http://www.zorba-xquery.com/modules/sqlite:SQLI0009
Follow ups