SET(VERSION_MAJOR 0)
SET(VERSION "${VERSION_MAJOR}.1.0")
-SET(SRCS util_func.c)
+SET(SRCS util_func.c collation.c)
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
pkg_check_modules(pkgs REQUIRED
sqlite3
dlog
+ glib-2.0
+ icu-i18n
)
FOREACH(flag ${pkgs_CFLAGS})
ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"")
ADD_DEFINITIONS("-DFACTORYFS=\"$ENV{FACTORYFS}\"")
+ADD_DEFINITIONS("-DDB_UTIL_USING_PLATFORM_DBG")
+ADD_DEFINITIONS("-DDB_UTIL_ENABLE_TRACE")
+##ADD_DEFINITIONS("-DDB_UTIL_ENABLE_DEVDEBUG")
ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS})
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} -ldl)
INSTALL(TARGETS ${PROJECT_NAME} DESTINATION lib COMPONENT RuntimeLibraries)
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/db-util.pc DESTINATION lib/pkgconfig)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/db-util.h DESTINATION include/db-util)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/db-util-common.h DESTINATION include/db-util)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/util-func.h DESTINATION include/db-util)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/collation.h DESTINATION include/db-util)
--- /dev/null
+#!/bin/sh
+
+export TET_INSTALL_PATH=/home/deuk/repository/tetware/TETware # local tetware path
+export TET_TARGET_PATH=$TET_INSTALL_PATH/tetware-target
+export PATH=$TET_TARGET_PATH/bin:$PATH
+export LD_LIBRARY_PATH=$TET_TARGET_PATH/lib/tet3:$LD_LIBRARY_PATH
+export TET_ROOT=$TET_TARGET_PATH
+
+export TET_SUITE_ROOT=`pwd`
+FILE_NAME_EXTENSION=`date +%s`
+
+RESULT_DIR=results
+HTML_RESULT=$RESULT_DIR/build-tar-result-$FILE_NAME_EXTENSION.html
+JOURNAL_RESULT=$RESULT_DIR/build-tar-result-$FILE_NAME_EXTENSION.journal
+
+mkdir -p $RESULT_DIR
+
+tcc -c -p ./
+tcc -b -j $JOURNAL_RESULT -p ./
+grw -c 3 -f chtml -o $HTML_RESULT $JOURNAL_RESULT
--- /dev/null
+#!/bin/sh
+export TET_INSTALL_PATH=/mnt/nfs/tetware/TETware
+export TET_TARGET_PATH=$TET_INSTALL_PATH/tetware-target
+export PATH=$TET_TARGET_PATH/bin:$PATH
+export LD_LIBRARY_PATH=$TET_TARGET_PATH/lib/tet3:$LD_LIBRARY_PATH
+
+export TET_ROOT=$TET_TARGET_PATH
+
+export TET_SUITE_ROOT=`pwd`
+FILE_NAME_EXTENSION=`date +%s`
+
+RESULT_DIR=results
+HTML_RESULT=$RESULT_DIR/exec-tar-result-$FILE_NAME_EXTENSION.html
+JOURNAL_RESULT=$RESULT_DIR/exec-tar-result-$FILE_NAME_EXTENSION.journal
+
+mkdir -p $RESULT_DIR
+
+tcc -e -j $JOURNAL_RESULT -p ./
+grw -c 3 -f chtml -o $HTML_RESULT $JOURNAL_RESULT
--- /dev/null
+# TET reserved codes
+0 "PASS"
+1 "FAIL"
+2 "UNRESOLVED"
+3 "NOTINUSE"
+4 "UNSUPPORTED"
+5 "UNTESTED"
+6 "UNINITIATED"
+7 "NORESULT"
+
+# Test suite additional codes
+33 "INSPECT"
--- /dev/null
+all
+ ^TEST
+##### Scenarios for TEST #####
+
+# Test scenario
+TEST
+ :include:/unit/tslist
--- /dev/null
+TET_OUTPUT_CAPTURE=False
+TET_BUILD_TOOL=make
--- /dev/null
+TET_OUTPUT_CAPTURE=False
+TET_CLEAN_TOOL=make clean
--- /dev/null
+TET_OUTPUT_CAPTURE=False
--- /dev/null
+CC ?= gcc
+
+TARGETS = utc_ApplicationFW_db_util_close \
+ utc_ApplicationFW_db_util_open \
+ utc_ApplicationFW_db_util_open_with_options \
+
+PKGS = sqlite3 dlog db-util
+
+LDFLAGS = `pkg-config --libs $(PKGS)`
+LDFLAGS += $(TET_ROOT)/lib/tet3/tcm_s.o
+LDFLAGS += -L$(TET_ROOT)/lib/tet3 -ltcm_s
+LDFLAGS += -L$(TET_ROOT)/lib/tet3 -lapi_s
+LDFLAGS += -pthread
+
+CFLAGS = -I. `pkg-config --cflags $(PKGS)`
+CFLAGS += -I$(TET_ROOT)/inc/tet3
+CFLAGS += -Wall
+
+all: $(TARGETS)
+
+$(TARGETS): %: %.c
+ $(CC) -o $@ $< $(CFLAGS) $(LDFLAGS)
+
+clean:
+ rm -f $(TARGETS)
--- /dev/null
+#!/bin/sh
+
+TMPSTR=$0
+SCRIPT=${TMPSTR##*/}
+
+if [ $# -lt 2 ]; then
+ echo "Usage) $SCRIPT module_name api_name"
+ exit 1
+fi
+
+MODULE=$1
+API=$2
+TEMPLATE=utc_MODULE_API_func.c.in
+TESTCASE=utc_${MODULE}_${API}_func
+
+sed -e '
+ s^@API@^'"$API"'^g
+ s^@MODULE@^'"$MODULE"'^g
+ ' $TEMPLATE > $TESTCASE.c
+
+if [ ! -e "$TESTCASE.c" ]; then
+ echo "Failed"
+ exit 1
+fi
+echo "Testcase file is $TESTCASE.c"
+echo "Done"
+echo "please put \"$TESTCASE\" as Target in Makefile"
+echo "please put \"/unit/$TESTCASE\" in tslist"
--- /dev/null
+/unit/utc_ApplicationFW_db_util_close
+/unit/utc_ApplicationFW_db_util_open
+/unit/utc_ApplicationFW_db_util_open_with_options
--- /dev/null
+/*
+ * libslp-db-util
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Hakjoo Ko <hakjoo.ko@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <tet_api.h>
+#include <db-util.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_ApplicationFW_db_util_close_func_01(void);
+static void utc_ApplicationFW_db_util_close_func_02(void);
+
+static sqlite3* db_hd = NULL;
+char* db_path = "/opt/test.db";
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+struct tet_testlist tet_testlist[] = {
+ { utc_ApplicationFW_db_util_close_func_01, POSITIVE_TC_IDX },
+ { utc_ApplicationFW_db_util_close_func_02, NEGATIVE_TC_IDX },
+ { NULL, 0 }
+};
+
+static void startup(void)
+{
+}
+
+static void cleanup(void)
+{
+}
+
+/**
+ * @brief Positive test case of db_util_close()
+ */
+static void utc_ApplicationFW_db_util_close_func_01(void)
+{
+ int r = 0;
+
+ r = db_util_open(db_path, &db_hd, 0);
+ if (r != SQLITE_OK) {
+ tet_infoline("db_util_close() failed in positive test case");
+ tet_result(TET_FAIL);
+ return;
+ }
+
+ r = db_util_close(db_hd);
+ if (r != SQLITE_OK) {
+ tet_infoline("db_util_close() failed in positive test case");
+ tet_result(TET_FAIL);
+ return;
+ }
+ db_hd = NULL;
+
+ tet_result(TET_PASS);
+}
+
+/**
+ * @brief Negative test case of ug_init db_util_close()
+ */
+static void utc_ApplicationFW_db_util_close_func_02(void)
+{
+ int r = 0;
+ sqlite3_stmt *db_stmt = NULL;
+
+ db_hd = NULL;
+
+ r = db_util_open(db_path, &db_hd, 0);
+ if (r != SQLITE_OK) {
+ tet_infoline("db_util_close() failed in negative test case");
+ tet_result(TET_FAIL);
+ return;
+ }
+
+ r = sqlite3_prepare(db_hd, "create table test(id int);", -1, &db_stmt, NULL);
+ if (r != SQLITE_OK) {
+ tet_infoline("db_util_close() failed in negative test case");
+ tet_result(TET_FAIL);
+ return;
+ }
+
+ r = db_util_close(db_hd);
+ if (r == SQLITE_OK) {
+ tet_infoline("db_util_close() failed in negative test case");
+ tet_result(TET_FAIL);
+ return;
+ }
+
+ tet_result(TET_PASS);
+}
+
--- /dev/null
+/*
+ * libslp-db-util
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Hakjoo Ko <hakjoo.ko@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <tet_api.h>
+#include <db-util.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_ApplicationFW_db_util_open_func_01(void);
+static void utc_ApplicationFW_db_util_open_func_02(void);
+
+static sqlite3* db_hd = NULL;
+char* db_path = "test.db";
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+struct tet_testlist tet_testlist[] = {
+ { utc_ApplicationFW_db_util_open_func_01, POSITIVE_TC_IDX },
+ { utc_ApplicationFW_db_util_open_func_02, NEGATIVE_TC_IDX },
+ { NULL, 0 }
+};
+
+static void startup(void)
+{
+}
+
+static void cleanup(void)
+{
+ db_util_close(db_hd);
+}
+
+/**
+ * @brief Positive test case of db_util_open()
+ */
+static void utc_ApplicationFW_db_util_open_func_01(void)
+{
+ int r = 0;
+
+ r = db_util_open(db_path, &db_hd, 0);
+ if (r != SQLITE_OK) {
+ tet_infoline("db_util_open() failed in positive test case");
+ tet_result(TET_FAIL);
+ return;
+ }
+
+ tet_result(TET_PASS);
+}
+
+/**
+ * @brief Negative test case of ug_init db_util_open()
+ */
+static void utc_ApplicationFW_db_util_open_func_02(void)
+{
+ int r = 0;
+
+ r = db_util_open(NULL, &db_hd, 0);
+ if (r == SQLITE_OK) {
+ tet_infoline("db_util_open() failed in negative test case");
+ tet_result(TET_FAIL);
+ return;
+ }
+
+ r = db_util_open(db_path, NULL, 0);
+ if (r == SQLITE_OK) {
+ tet_infoline("db_util_open() failed in negative test case");
+ tet_result(TET_FAIL);
+ return;
+ }
+
+ tet_result(TET_PASS);
+}
--- /dev/null
+/*
+ * libslp-db-util
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Hakjoo Ko <hakjoo.ko@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <tet_api.h>
+#include <db-util.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_ApplicationFW_db_util_open_with_options_func_01(void);
+static void utc_ApplicationFW_db_util_open_with_options_func_02(void);
+
+static sqlite3* db_hd = NULL;
+char* db_path = "/opt/test.db";
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+struct tet_testlist tet_testlist[] = {
+ { utc_ApplicationFW_db_util_open_with_options_func_01, POSITIVE_TC_IDX },
+ { utc_ApplicationFW_db_util_open_with_options_func_02, NEGATIVE_TC_IDX },
+ { NULL, 0 }
+};
+
+static void startup(void)
+{
+}
+
+static void cleanup(void)
+{
+ db_util_close(db_hd);
+}
+
+/**
+ * @brief Positive test case of db_util_open_with_options()
+ */
+static void utc_ApplicationFW_db_util_open_with_options_func_01(void)
+{
+ int r = 0;
+
+ r = db_util_open_with_options(db_path, &db_hd, SQLITE_OPEN_READWRITE, NULL);
+ if (r != SQLITE_OK) {
+ tet_infoline("db_util_open() failed in positive test case");
+ tet_result(TET_FAIL);
+ return;
+ }
+
+ tet_result(TET_PASS);
+}
+
+/**
+ * @brief Negative test case of ug_init db_util_open_with_options()
+ */
+static void utc_ApplicationFW_db_util_open_with_options_func_02(void)
+{
+ int r = 0;
+
+ r = db_util_open_with_options(NULL, &db_hd, SQLITE_OPEN_READWRITE, NULL);
+ if (r == SQLITE_OK) {
+ tet_infoline("db_util_open() failed in negative test case");
+ tet_result(TET_FAIL);
+ return;
+ }
+
+ r = db_util_open_with_options(db_path, NULL, SQLITE_OPEN_READWRITE, NULL);
+ if (r == SQLITE_OK) {
+ tet_infoline("db_util_open() failed in negative test case");
+ tet_result(TET_FAIL);
+ return;
+ }
+
+ r = db_util_open_with_options(db_path, &db_hd, 0, NULL);
+ if (r == SQLITE_OK) {
+ tet_infoline("db_util_open() failed in negative test case");
+ tet_result(TET_FAIL);
+ return;
+ }
+
+ unlink(db_path);
+
+ r = db_util_open_with_options(db_path, &db_hd, SQLITE_OPEN_READONLY, NULL);
+ if (r == SQLITE_OK) {
+ tet_infoline("db_util_open() failed in negative test case");
+ tet_result(TET_FAIL);
+ return;
+ }
+
+ tet_result(TET_PASS);
+}
+
+
--- /dev/null
+#include <tet_api.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_@MODULE@_@API@_func_01(void);
+static void utc_@MODULE@_@API@_func_02(void);
+
+enum {
+ POSITIVE_TC_IDX = 0x01,
+ NEGATIVE_TC_IDX,
+};
+
+struct tet_testlist tet_testlist[] = {
+ { utc_@MODULE@_@API@_func_01, POSITIVE_TC_IDX },
+ { utc_@MODULE@_@API@_func_02, NEGATIVE_TC_IDX },
+};
+
+static void startup(void)
+{
+}
+
+static void cleanup(void)
+{
+}
+
+/**
+ * @brief Positive test case of @API@()
+ */
+static void utc_@MODULE@_@API@_func_01(void)
+{
+ int r = 0;
+
+ r = @API@(...);
+
+ if (r<0) {
+ tet_infoline("@API@() failed in positive test case");
+ tet_result(TET_FAIL);
+ return;
+ }
+ tet_result(TET_PASS);
+}
+
+/**
+ * @brief Negative test case of ug_init @API@()
+ */
+static void utc_@MODULE@_@API@_func_02(void)
+{
+ int r = 0;
+
+ r = @API@(...);
+
+ if (r>=0) {
+ tet_infoline("@API@() failed in negative test case");
+ tet_result(TET_FAIL);
+ return;
+ }
+ tet_result(TET_PASS);
+}
--- /dev/null
+/*
+ * libslp-db-util
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Hakjoo Ko <hakjoo.ko@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+#include <string.h>
+#include <math.h>
+#include <wchar.h>
+#include <wctype.h>
+
+#include <unistd.h>
+#include <glib.h>
+
+#include <dlfcn.h>
+
+#include <unicode/utypes.h>
+#include <unicode/ucol.h>
+#include <unicode/uiter.h>
+#include <unicode/ustring.h>
+
+#include "collation.h"
+
+#include "db-util-debug.h"
+
+#define DB_UTIL_RETV_IF(cond,ret) \
+ do {\
+ if(cond) {\
+ DB_UTIL_TRACE_WARNING("\x1b[33m[%s()][RET_IF]\x1b[0m",__FUNCTION__);\
+ return ret;\
+ }\
+ }while(0)
+
+#define DB_UTIL_RET_IF(cond) \
+ do {\
+ if(cond) {\
+ DB_UTIL_TRACE_WARNING("\x1b[33m[%s()][RET_IF]\x1b[0m",__FUNCTION__);\
+ return;\
+ }\
+ }while(0)
+
+#define DB_UTIL_ERR_COL_FUNC_RET DB_UTIL_ERROR
+
+enum {
+ DB_UTIL_ERR_DLOPEN = -10,
+ DB_UTIL_ERR_DLSYM,
+ DB_UTIL_ERR_ENV,
+ DB_UTIL_ERR_ICU,
+ DB_UTIL_ERR_PARAM
+};
+
+enum {
+ DB_UTIL_CMP_SC,
+ /* Loop comparison */
+ DB_UTIL_CMP_LC
+};
+
+#define ICU_FUNC_CNT 8
+
+typedef UCollator* (*ICU_UCOL_OPEN)(const char *, UErrorCode *);
+typedef void (*ICU_UCOL_CLOSE)(UCollator *);
+typedef void (*ICU_UCOL_SETSTRENGTH)(UCollator *, UCollationStrength);
+typedef UCollationResult (*ICU_UCOL_STRCOLL)(const UCollator *, const UChar *, int32_t, const UChar *, int32_t);
+typedef UCollationResult (*ICU_UCOL_STRCOLLITER)(const UCollator *, UCharIterator *, UCharIterator *, UErrorCode *);
+typedef void (*ICU_UITER_SETUTF8)(UCharIterator *, const char *, int32_t);
+typedef void (*ICU_ULOC_SETDEFAULT)(const char* localeID, UErrorCode* status);
+typedef const char* (*ICU_ULOC_GETDEFAULT)(void);
+
+typedef struct {
+ ICU_UCOL_OPEN icu_ucol_open;
+ ICU_UCOL_CLOSE icu_ucol_close;
+ ICU_UCOL_STRCOLL icu_ucol_strcoll;
+ ICU_UCOL_STRCOLLITER icu_ucol_strcollIter;
+ ICU_UCOL_SETSTRENGTH icu_ucol_setStrength;
+ ICU_UITER_SETUTF8 icu_uiter_setUTF8;
+ ICU_ULOC_SETDEFAULT icu_uloc_setDefault;
+ ICU_ULOC_GETDEFAULT icu_uloc_getDefault;
+} db_util_icu_func_t;
+
+db_util_icu_func_t icu_symbol;
+
+void *g_dl_icu_handle = NULL;
+
+#ifdef DB_UTIL_ENABLE_DEVDEBUG
+static char *strtoutf8(const UChar * unichars, int len);
+#endif
+
+static int __db_util_dl_load_icu()
+{
+ void *handle = NULL;
+ void *icu_handle[ICU_FUNC_CNT] = { 0 };
+ char *dl_error;
+ int i = 0;
+
+ const char *ICU_API[] = {
+ "ucol_open",
+ "ucol_close",
+ "ucol_strcoll",
+ "ucol_strcollIter",
+ "ucol_setStrength",
+ "uiter_setUTF8",
+ "uloc_setDefault",
+ "uloc_getDefault"
+ };
+
+ if(g_dl_icu_handle == NULL) {
+ g_dl_icu_handle = dlopen("libicui18n.so", RTLD_LAZY | RTLD_GLOBAL);
+ if(g_dl_icu_handle == NULL) {
+ DB_UTIL_TRACE_WARNING("dlopen icu so fail");
+ return DB_UTIL_ERR_DLOPEN;
+ }
+ }
+
+ for (i = 0; i < ICU_FUNC_CNT; i++) {
+ handle = dlsym(g_dl_icu_handle, ICU_API[i]);
+ if ((dl_error = dlerror()) != NULL) {
+ DB_UTIL_TRACE_WARNING("dlsym(%s) is failed for %s",
+ dl_error, ICU_API[i]);
+ return DB_UTIL_ERR_DLSYM;
+ }
+ icu_handle[i] = handle;
+ }
+
+ memcpy((void*)&icu_symbol, (const void*)icu_handle, sizeof(icu_handle));
+
+ return DB_UTIL_OK;
+}
+
+/* The collating function must return an integer that is negative, zero or positive */
+static int __db_util_collate_icu_16(void *ucol, int str1_len, const void *str1, int str2_len, const void *str2)
+{
+#ifdef DB_UTIL_ENABLE_DEVDEBUG
+ DB_UTIL_TRACE_DEBUG("__db_util_collate_icu_16 func start \n");
+
+ UChar* tmp_v1 = (UChar *)str1;
+ UChar* tmp_v2 = (UChar *)str2;
+ char* utf8_v1 = strtoutf8(tmp_v1, str1_len);
+ char* utf8_v2 = strtoutf8(tmp_v2, str2_len);
+
+ DB_UTIL_TRACE_DEBUG("v1(%d) : %s\n", str1_len, utf8_v1);
+ DB_UTIL_TRACE_DEBUG("v2(%d) : %s\n", str2_len, utf8_v2);
+#endif
+
+ DB_UTIL_RETV_IF(icu_symbol.icu_ucol_strcoll == NULL, DB_UTIL_ERR_COL_FUNC_RET);
+
+ UCollationResult result = icu_symbol.icu_ucol_strcoll(
+ (UCollator *) ucol,
+ (const UChar *) str1, str1_len,
+ (const UChar *) str2, str2_len);
+
+#ifdef DB_UTIL_ENABLE_DEVDEBUG
+ if(utf8_v1)
+ free(utf8_v1);
+ if(utf8_v2)
+ free(utf8_v2);
+
+ if (result == UCOL_LESS) {
+ DB_UTIL_TRACE_DEBUG("less \n");
+ } else if (result == UCOL_GREATER) {
+ DB_UTIL_TRACE_DEBUG("greater \n");
+ } else {
+ DB_UTIL_TRACE_DEBUG("equal \n");
+ }
+#endif
+
+ return result;
+}
+
+/* The collating function must return an integer that is negative, zero or positive */
+static int __db_util_collate_icu_16_lc(void *ucol, int str1_len, const void *str1, int str2_len, const void *str2)
+{
+#ifdef DB_UTIL_ENABLE_DEVDEBUG
+ DB_UTIL_TRACE_DEBUG("__db_util_collate_icu_16_lc func start \n");
+
+ UChar* tmp_v1 = (UChar *)str1;
+ UChar* tmp_v2 = (UChar *)str2;
+
+ char* utf8_v1 = strtoutf8(tmp_v1, str1_len);
+ char* utf8_v2 = strtoutf8(tmp_v2, str2_len);
+
+ DB_UTIL_TRACE_DEBUG("v1(%d) : %s\n", str1_len, utf8_v1);
+ DB_UTIL_TRACE_DEBUG("v2(%d) : %s\n", str2_len, utf8_v2);
+
+ if(utf8_v1)
+ free(utf8_v1);
+ if(utf8_v2)
+ free(utf8_v2);
+#endif
+
+ UCollationResult result = 0;
+
+ UChar* str_to = (UChar *)str1;
+ UChar* str_from = (UChar *)str1;
+
+ int i;
+
+ DB_UTIL_RETV_IF(icu_symbol.icu_ucol_strcoll == NULL, DB_UTIL_ERR_COL_FUNC_RET);
+
+ if(str1_len> str2_len) {
+ for(i=0;i<str2_len;i=i+2) {
+ str_to++;
+ }
+
+ while((int)(str_to-(UChar*)str1) <= str1_len) {
+ result = icu_symbol.icu_ucol_strcoll(
+ (UCollator *) ucol,
+ (UChar *) str_from, str_to-str_from,
+ (const UChar *) str2, str2_len);
+
+ if (result == UCOL_EQUAL)
+ {
+#ifdef DB_UTIL_ENABLE_DEVDEBUG
+ DB_UTIL_TRACE_DEBUG("equal \n");
+#endif
+ return UCOL_EQUAL;
+ }
+
+ str_to++;
+ str_from++;
+ }
+ } else {
+ result = icu_symbol.icu_ucol_strcoll(
+ (UCollator *) ucol,
+ (const UChar *) str1, str1_len,
+ (const UChar *) str2, str2_len);
+ }
+
+#ifdef DB_UTIL_ENABLE_DEVDEBUG
+ if (result == UCOL_LESS) {
+ DB_UTIL_TRACE_DEBUG("less \n");
+ } else if (result == UCOL_GREATER) {
+ DB_UTIL_TRACE_DEBUG("greater \n");
+ } else if (result == UCOL_EQUAL) {
+ DB_UTIL_TRACE_DEBUG("equal \n");
+ } else {
+ DB_UTIL_TRACE_DEBUG("compare error : %d \n", result);
+ }
+#endif
+
+ return result;
+}
+
+/* The collating function must return an integer that is negative, zero or positive */
+static int __db_util_collate_icu_8(void *ucol, int str1_len, const void *str1, int str2_len, const void *str2)
+{
+ UCharIterator uiter1, uiter2;
+ UErrorCode error = U_ZERO_ERROR;
+
+#ifdef DB_UTIL_ENABLE_DEVDEBUG
+ DB_UTIL_TRACE_DEBUG("__db_util_collate_icu_8 func start \n");
+ DB_UTIL_TRACE_DEBUG("v1(%d) : %s, v2(%d) : %s \n", str1_len, (char*)str1, str2_len, (char*)str2);
+#endif
+
+ DB_UTIL_RETV_IF(icu_symbol.icu_uiter_setUTF8 == NULL, DB_UTIL_ERR_COL_FUNC_RET);
+ DB_UTIL_RETV_IF(icu_symbol.icu_ucol_strcollIter == NULL, DB_UTIL_ERR_COL_FUNC_RET);
+
+ icu_symbol.icu_uiter_setUTF8(&uiter1, (const char *) str1, str1_len);
+ icu_symbol.icu_uiter_setUTF8(&uiter2, (const char *) str2, str2_len);
+
+ UCollationResult result = icu_symbol.icu_ucol_strcollIter(
+ (UCollator *) ucol,
+ &uiter1,
+ &uiter2,
+ &error);
+ if(U_FAILURE(error)) {
+ DB_UTIL_TRACE_ERROR("__db_util_collate_icu_8 ucol_strcollIter error: %d\n", error);
+ return DB_UTIL_ERR_COL_FUNC_RET;
+ }
+
+#ifdef DB_UTIL_ENABLE_DEVDEBUG
+ if (result == UCOL_LESS) {
+ DB_UTIL_TRACE_DEBUG("less \n");
+ } else if (result == UCOL_GREATER) {
+ DB_UTIL_TRACE_DEBUG("greater \n");
+ } else {
+ DB_UTIL_TRACE_DEBUG("equal \n");
+ }
+#endif
+
+ return result;
+}
+
+static int __db_util_collate_icu_8_lc(void *ucol, int str1_len, const void *str1, int str2_len, const void *str2)
+{
+ UCharIterator uiter1, uiter2;
+ UErrorCode error = U_ZERO_ERROR;
+ UCollationResult result = 0;
+ char* str_from = (char*)str1;
+ char* str_to = (char*)str1;
+ glong v1_char_len, v2_char_len;
+ int ret, i;
+
+#ifdef DB_UTIL_ENABLE_DEVDEBUG
+ DB_UTIL_TRACE_DEBUG("__db_util_collate_icu_8_lc func start \n");
+ DB_UTIL_TRACE_DEBUG("v1(%d) : %s, v2(%d) : %s \n", str1_len, (char*)str1, str2_len, (char*)str2);
+#endif
+
+ DB_UTIL_RETV_IF(icu_symbol.icu_uiter_setUTF8 == NULL, DB_UTIL_ERR_COL_FUNC_RET);
+ DB_UTIL_RETV_IF(icu_symbol.icu_ucol_strcollIter == NULL, DB_UTIL_ERR_COL_FUNC_RET);
+
+ icu_symbol.icu_uiter_setUTF8(&uiter2, (const char *) str2, str2_len);
+
+ v1_char_len = g_utf8_strlen((gchar *)str1,-1);
+ v2_char_len = g_utf8_strlen((gchar *)str2,-1);
+
+ if(v1_char_len > v2_char_len) {
+ for(i=0;i<v2_char_len;i++) {
+ str_to = g_utf8_next_char(str_to);
+ }
+
+ while((int)(str_to-(char*)str1) <= str1_len) {
+ icu_symbol.icu_uiter_setUTF8(
+ &uiter1,
+ (const char *) str_from,
+ str_to - str_from);
+
+ result = icu_symbol.icu_ucol_strcollIter(
+ (UCollator *) ucol,
+ &uiter1,
+ &uiter2,
+ &error);
+ if (U_FAILURE(error)) {
+ DB_UTIL_TRACE_ERROR("__db_util_collate_icu_8_lc ucol_strcollIter error: %d\n", error);
+ return DB_UTIL_ERR_COL_FUNC_RET;
+ }
+
+ if(result == UCOL_EQUAL)
+#ifdef DB_UTIL_ENABLE_DEVDEBUG
+ {
+ DB_UTIL_TRACE_DEBUG("equal \n");
+ return UCOL_EQUAL;
+ }
+#else
+ return UCOL_EQUAL;
+#endif
+
+ str_to = g_utf8_next_char(str_to);
+ str_from = g_utf8_next_char(str_from);
+ }
+ }
+ else
+ {
+ icu_symbol.icu_uiter_setUTF8(
+ &uiter1,
+ (const char *) str1,
+ str1_len);
+
+ result = icu_symbol.icu_ucol_strcollIter(
+ (UCollator *) ucol,
+ &uiter1,
+ &uiter2,
+ &error);
+ if (U_FAILURE(error)) {
+ DB_UTIL_TRACE_ERROR("__db_util_collate_icu_8_lc ucol_strcollIter error: %d\n", error);
+ return DB_UTIL_ERR_COL_FUNC_RET;
+ }
+ }
+
+#ifdef DB_UTIL_ENABLE_DEVDEBUG
+ if (result == UCOL_LESS)
+ {
+ DB_UTIL_TRACE_DEBUG("less \n");
+ }
+ else if (result == UCOL_GREATER)
+ {
+ DB_UTIL_TRACE_DEBUG("greater \n");
+ }
+ else if(result == UCOL_EQUAL)
+ {
+ DB_UTIL_TRACE_DEBUG("equal \n");
+ }
+ else
+ {
+ DB_UTIL_TRACE_DEBUG("compare error : %d\n", result);
+ }
+#endif
+
+ return result;
+}
+
+static void __db_util_collate_icu_close(void* ucol)
+{
+ DB_UTIL_TRACE_DEBUG("close icu collator\n");
+
+ DB_UTIL_RET_IF(icu_symbol.icu_ucol_close == NULL);
+
+ icu_symbol.icu_ucol_close((UCollator *) ucol);
+}
+
+static int __db_util_collation_create(sqlite3* db_handle, char* locale, char* collator_name, UCollationStrength ucol_strength_value, int utf_type, int cmp_type)
+{
+ int err;
+ UErrorCode status = U_ZERO_ERROR;
+
+ DB_UTIL_RETV_IF(icu_symbol.icu_ucol_open == NULL, DB_UTIL_ERR_DLSYM);
+ DB_UTIL_RETV_IF(icu_symbol.icu_ucol_setStrength == NULL, DB_UTIL_ERR_DLSYM);
+
+ UCollator* ucol = icu_symbol.icu_ucol_open(locale, &status);
+ if(status == U_USING_DEFAULT_WARNING) {
+ DB_UTIL_TRACE_ERROR("ucol_open success with default collate option\n");
+ } else if (U_FAILURE(status)) {
+ DB_UTIL_TRACE_ERROR("ucol_open fail : %d \n", status);
+ return DB_UTIL_ERR_ICU;
+ }
+#ifdef DB_UTIL_ENABLE_DEVDEBUG
+ else
+ {
+ DB_UTIL_TRACE_DEBUG("ucol_open success : %d \n", status);
+ }
+#endif
+
+ if(ucol_strength_value) {
+ icu_symbol.icu_ucol_setStrength(ucol, ucol_strength_value);
+ if (U_FAILURE(status)) {
+ DB_UTIL_TRACE_ERROR("ucol_setStrength fail : %d \n", status);
+ return DB_UTIL_ERR_ICU;
+ } else {
+ DB_UTIL_TRACE_DEBUG("ucol_setStrength success \n");
+ }
+ }
+
+ if(utf_type == DB_UTIL_COL_UTF8) {
+ if(cmp_type == DB_UTIL_CMP_LC) {
+ err = sqlite3_create_collation_v2(db_handle, collator_name, SQLITE_UTF8, ucol,
+ __db_util_collate_icu_8_lc, (void(*)(void*))__db_util_collate_icu_close);
+ } else {
+ err = sqlite3_create_collation_v2(db_handle, collator_name, SQLITE_UTF8, ucol,
+ __db_util_collate_icu_8, (void(*)(void*))__db_util_collate_icu_close);
+ }
+ } else if(utf_type == DB_UTIL_COL_UTF16) {
+ if(cmp_type == DB_UTIL_CMP_LC) {
+ err = sqlite3_create_collation_v2(db_handle, collator_name, SQLITE_UTF16, ucol,
+ __db_util_collate_icu_16_lc, (void(*)(void*))__db_util_collate_icu_close);
+ } else {
+ err = sqlite3_create_collation_v2(db_handle, collator_name, SQLITE_UTF16, ucol,
+ __db_util_collate_icu_16, (void(*)(void*))__db_util_collate_icu_close);
+ }
+ } else {
+ DB_UTIL_TRACE_ERROR("wrong utf_type param value : %d\n", utf_type);
+ return DB_UTIL_ERR_PARAM;
+ }
+
+ if (err != SQLITE_OK) {
+ DB_UTIL_TRACE_ERROR("sqlite3_create_collation_v2 fail : %d \n", err);
+ __db_util_collate_icu_close((void*)ucol);
+ return err;
+ } else {
+ DB_UTIL_TRACE_DEBUG("sqlite3_create_collation_v2 success \n");
+ return DB_UTIL_OK;
+ }
+}
+
+int db_util_create_collation(
+ PARAM_IN sqlite3 *db_handle,
+ PARAM_IN db_util_collate_type type,
+ PARAM_IN db_util_collate_textrep text_type,
+ PARAM_IN char* col_name)
+{
+ int ret = DB_UTIL_OK;
+ UErrorCode status = U_ZERO_ERROR;
+ char *dl_error = NULL;
+ const char* locale = NULL;
+
+ DB_UTIL_TRACE_DEBUG("db_util_create_collation start");
+
+ ret = __db_util_dl_load_icu();
+ DB_UTIL_RETV_IF(ret != DB_UTIL_OK, DB_UTIL_ERROR);
+
+ /* get current locale */
+ icu_symbol.icu_uloc_setDefault((const char*)getenv("LC_COLLATE"), &status);
+ locale = icu_symbol.icu_uloc_getDefault();
+ if(locale == NULL) {
+ DB_UTIL_TRACE_WARNING("Fail to get current locale : %d", DB_UTIL_ERR_ENV);
+ return DB_UTIL_ERROR;
+ }
+ DB_UTIL_TRACE_DEBUG("locale : %s", locale);
+
+#ifdef ENABLE_COL_KO_IC
+ if((db_util_collate_type == DB_UTIL_COL_KO_IC) ||
+ (db_util_collate_type == DB_UTIL_COL_KO_IC_LC)) {
+ if(strncmp(locale, "ko", 2) != 0) {
+ DB_UTIL_TRACE_WARNING("collate type is not match with current locale : %d", DB_UTIL_ERR_ENV);
+ return DB_UTIL_ERROR;
+ }
+ }
+#endif
+
+ switch(type) {
+ case DB_UTIL_COL_UCA :
+ ret = __db_util_collation_create(db_handle, NULL, col_name, UCOL_SECONDARY, text_type, DB_UTIL_CMP_SC);
+ break;
+ case DB_UTIL_COL_LS_AS_CI :
+ ret = __db_util_collation_create(db_handle, (char*)locale, col_name, UCOL_SECONDARY, text_type, DB_UTIL_CMP_SC);
+ break;
+ case DB_UTIL_COL_LS_AI_CI :
+ ret = __db_util_collation_create(db_handle, (char*)locale, col_name, UCOL_PRIMARY, text_type, DB_UTIL_CMP_SC);
+ break;
+ case DB_UTIL_COL_LS_AI_CI_LC :
+ ret = __db_util_collation_create(db_handle, (char*)locale, col_name, UCOL_PRIMARY, text_type, DB_UTIL_CMP_LC);
+ break;
+#ifdef ENABLE_COL_KO_IC
+ case DB_UTIL_COL_KO_IC :
+ ret = __db_util_collation_create(db_handle, (char*)locale, col_name, UCOL_PRIMARY, text_type, DB_UTIL_CMP_SC);
+ break;
+ case DB_UTIL_COL_KO_IC_LC :
+ ret = __db_util_collation_create(db_handle, (char*)locale, col_name, UCOL_PRIMARY, text_type, DB_UTIL_CMP_LC);
+ break;
+#endif
+ default :
+ DB_UTIL_TRACE_WARNING("wrong collate input type");
+ }
+
+ if(ret != DB_UTIL_OK)
+ ret = DB_UTIL_ERROR;
+
+ return ret;
+}
+
+#ifdef DB_UTIL_ENABLE_DEVDEBUG
+
+static char *strtoutf8(const UChar * unichars, int len)
+{
+ DB_UTIL_TRACE_WARNING("strtoutf8 start");
+
+ int lenstr, lenutf8;
+ char *pstr = NULL;
+ UErrorCode status = U_ZERO_ERROR;
+
+ lenstr = lenutf8 = 0;
+ lenstr = sizeof(char) * 4 * (len + 1);
+ pstr = (char *)malloc(lenstr);
+ if (!pstr)return NULL;
+ u_strToUTF8(pstr, lenstr, &lenutf8, unichars, len, &status);
+ if (U_FAILURE(status)) {
+ DB_UTIL_TRACE_WARNING("u_strToUTF8 failed in strtoutf8 :%s\n",
+ u_errorName(status));
+ return NULL;
+ }
+ DB_UTIL_TRACE_WARNING("strtoutf8 out : %s", pstr);
+ return pstr;
+}
+
+#endif
+
Name: db-util
Description: DB Utility
Version: @VERSION@
-Requires: sqlite3
+Requires: sqlite3 dlog glib-2.0 icu-i18n
Libs: -L${libdir} -lSLP-db-util
Cflags: -I${includedir}
+libslp-db-util (0.1.0-52) unstable; urgency=low
+
+ * disable return err for collation function
+ * Git: 165.213.180.234:slp/pkgs/l/libslp-db-util
+ * Tag: libslp-db-util_0.1.0-52
+
+ -- Hyungdeuk Kim <hd3.kim@samsung.com> Tue, 5 Jun 2012 19:00:37 +0900
+
+libslp-db-util (0.1.0-51) unstable; urgency=low
+
+ * match spec file for obs
+ * Git: 165.213.180.234:slp/pkgs/l/libslp-db-util
+ * Tag: libslp-db-util_0.1.0-51
+
+ -- Hyungdeuk Kim <hd3.kim@samsung.com> Mon, 28 May 2012 11:00:37 +0900
+
+libslp-db-util (0.1.0-50) unstable; urgency=low
+
+ * add collation api
+ * set localized collator at db_util_open api
+ * Git: 165.213.180.234:slp/pkgs/l/libslp-db-util
+ * Tag: libslp-db-util_0.1.0-50
+
+ -- Hyungdeuk Kim <hd3.kim@samsung.com> Sun, 27 May 2012 17:00:37 +0900
+
libslp-db-util (0.1.0-49) unstable; urgency=low
- * Initial Release.
- * Git: pkgs/l/libslp-db-util
+ * add export api define
+ * Git: 165.213.180.234:slp/pkgs/l/libslp-db-util
* Tag: libslp-db-util_0.1.0-49
- -- Hyungdeuk Kim <hd3.kim@samsung.com> Wed, 07 Dec 2011 14:40:37 +0900
+ -- Hyungdeuk Kim <hd3.kim@samsung.com> Thu, 15 Mar 2012 20:00:37 +0900
+
+libslp-db-util (0.1.0-48) unstable; urgency=low
+
+ * remove unused apis and header file
+ * Git: 165.213.180.234:slp/pkgs/l/libslp-db-util
+ * Tag: libslp-db-util_0.1.0-48
+
+ -- Hyungdeuk Kim <hd3.kim@samsung.com> Thu, 15 Mar 2012 17:00:37 +0900
+
+libslp-db-util (0.1.0-47) unstable; urgency=low
+
+ * deprecate unused apis
+ * Git: 165.213.180.234:slp/pkgs/l/libslp-db-util
+ * Tag: libslp-db-util_0.1.0-47
+
+ -- Hyungdeuk Kim <hd3.kim@samsung.com> Mon, 12 Mar 2012 16:40:37 +0900
+
+libslp-db-util (0.1.0-46) unstable; urgency=low
+
+ * add TC files
+ * insert code to check input param
+ * Git: 165.213.180.234:slp/pkgs/l/libslp-db-util
+ * Tag: libslp-db-util_0.1.0-46
+
+ -- Hyungdeuk Kim <hd3.kim@samsung.com> Wed, 15 Feb 2012 14:40:37 +0900
+
+libslp-db-util (0.1.0-45) unstable; urgency=low
+
+ * remove unnecessary files
+ * Git: 165.213.180.234:slp/pkgs/l/libslp-db-util
+ * Tag: libslp-db-util_0.1.0-45
+
+ -- Hyungdeuk Kim <hd3.kim@samsung.com> Fri, 02 Dec 2011 16:40:37 +0900
+
+libslp-db-util (0.1.0-44) unstable; urgency=low
+
+ * change busy handler time loop logic
+ * disable change journal mode option
+ * Git: 165.213.180.234:slp/pkgs/l/libslp-db-util
+ * Tag: libslp-db-util_0.1.0-44
+
+ -- Hyungdeuk Kim <hd3.kim@samsung.com> Tue, 15 Nov 2011 17:40:37 +0900
+
+libslp-db-util (0.1.0-43) unstable; urgency=low
+
+ * change busy handler time from 100ms to 1.5s
+ * disable change journal mode option
+ * Git: 165.213.180.234:slp/pkgs/l/libslp-db-util
+ * Tag: libslp-db-util_0.1.0-43
+
+ -- Hyungdeuk Kim <hd3.kim@samsung.com> Thu, 11 Nov 2011 17:40:37 +0900
+
+libslp-db-util (0.1.0-42) unstable; urgency=low
+
+ * change boilerplate
+ * Git: 165.213.180.234:slp/pkgs/l/libslp-db-util
+ * Tag: libslp-db-util_0.1.0-42
+
+ -- Hyungdeuk Kim <hd3.kim@samsung.com> Thu, 3 Nov 2011 17:40:37 +0900
+
+libslp-db-util (0.1.0-41) unstable; urgency=low
+
+ * apply indent & checkpath
+ * Git: 165.213.180.234:slp/pkgs/l/libslp-db-util
+ * Tag: libslp-db-util_0.1.0-41
+
+ -- Hyungdeuk Kim <hd3.kim@samsung.com> Tue, 26 May 2011 17:40:37 +0900
+
+libslp-db-util (0.1.0-40) unstable; urgency=low
+
+ * edit boilerplate
+ * Git: 165.213.180.234:slp/pkgs/l/libslp-db-util
+ * Tag: libslp-db-util_0.1.0-40
+
+ -- Hyungdeuk Kim <hd3.kim@samsung.com> Wed, 13 May 2011 17:40:37 +0900
+
+libslp-db-util (0.1.0-39) unstable; urgency=low
+
+ * add boilerplate to code
+ * Git: 165.213.180.234:slp/pkgs/l/libslp-db-util
+ * Tag: libslp-db-util_0.1.0-39
+
+ -- Hyungdeuk Kim <hd3.kim@samsung.com> Wed, 13 May 2011 16:40:37 +0900
+
+libslp-db-util (0.1.0-38) unstable; urgency=low
+
+ * change the procedure for db conection
+ * Git: 165.213.180.234:slp/pkgs/l/libslp-db-util
+ * Tag: libslp-db-util_0.1.0-38
+
+ -- Jinkun Jang <jinkun.jang@samsung.com> Wed, 04 May 2011 10:40:37 +0900
+
+libslp-db-util (0.1.0-37) unstable; urgency=low
+
+ * change == to =
+ * Git: 165.213.180.234:slp/pkgs/l/libslp-db-util
+ * Tag: libslp-db-util_0.1.0-37
+
+ -- Jinkun Jang <jinkun.jang@samsung.com> Wed, 15 Dec 2010 10:18:37 +0900
+
+libslp-db-util (0.1.0-36) unstable; urgency=low
+
+ * modify postinst
+ * Git: 165.213.180.234:slp/pkgs/l/libslp-db-util
+ * Tag: libslp-db-util_0.1.0-36
+
+ -- Jinkun.jang <jinkun.jang@samsung.com> Wed, 08 Dec 2010 20:04:32 +0900
+
+libslp-db-util (0.1.0-35) unstable; urgency=low
+
+ * add postinst
+ * Git: 165.213.180.234:slp/pkgs/l/libslp-db-util
+ * Tag: libslp-db-util_0.1.0-35
+
+ -- Jinkun.jang <jinkun.jang@samsung.com> Wed, 08 Dec 2010 19:00:58 +0900
+
+libslp-db-util (0.1.0-34) unstable; urgency=low
+
+ * add dependency for SQLite3 command package
+ * Git: 165.213.180.234:/git/slp/pkgs/libslp-db-util
+ * Tag: libslp-db-util_0.1.0-34
+
+ -- Jinkun Jang <jinkun.jang@samsung.com> Fri, 12 Nov 2010 10:20:03 +0900
+
+libslp-db-util (0.1.0-33) unstable; urgency=low
+
+ * add copyright
+ * Git: 165.213.180.234:/git/slp/pkgs/libslp-db-util
+ * Tag: libslp-db-util_0.1.0-33
+
+ -- Jinkun Jang <jinkun.jang@samsung.com> Wed, 27 Oct 2010 13:49:59 +0900
+
+libslp-db-util (0.1.0-32) unstable; urgency=low
+
+ * modified CMakeLists.txt for renaming so files
+ * Git: 165.213.180.234:/git/slp/pkgs/libslp-db-util
+ * Tag: libslp-db-util_0.1.0-32
+
+ -- Jinkun Jang <jinkun.jang@samsung.com> Thu, 21 Oct 2010 15:52:46 +0900
+
+libslp-db-util (0.1.0-31) unstable; urgency=low
+
+ * remove lucene trriger
+ * Git: 165.213.180.234:/git/slp/pkgs/libslp-db-util
+ * Tag: libslp-db-util_0.1.0-31
+
+ -- Jinkun Jang <jinkun.jang@samsung.com> Mon, 30 Aug 2010 16:01:53 +0900
+
+libslp-db-util (0.1.0-30) unstable; urgency=low
+
+ * remove @internal tag from header files
+ * Git: 165.213.180.234:/git/slp/pkgs/libslp-db-util
+ * Tag: libslp-db-util_0.1.0-30
+
+ -- Jinkun Jang <jinkun.jang@samsung.com> Thu, 22 Jul 2010 20:04:15 +0900
+
+libslp-db-util (0.1.0-29) unstable; urgency=low
+
+ * modify debian control file for "XB-Public-Package: no"
+ * Git: 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libslp-db-util-0
+ * Tag: libslp-db-util_0.1.0-29
+
+ -- Jinkun Jang <jinkun.jang@samsung.com> Mon, 12 Jul 2010 14:50:52 +0900
+
+libslp-db-util (0.1.0-28) unstable; urgency=low
+
+ * add maintainer
+ * Git: 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libslp-db-util-0
+ * Tag: libslp-db-util_0.1.0-28
+
+ -- Jinkun Jang <jinkun.jang@samsung.com> Thu, 08 Jul 2010 15:41:29 +0900
+
+libslp-db-util (0.1.0-27) unstable; urgency=low
+
+ * move header files to /usr/include/db-util
+ * Git: 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libslp-db-util-0
+ * Tag: libslp-db-util_0.1.0-27
+
+ -- jinkun.jang <jinkun.jang@samsung.com> Thu, 17 Jun 2010 12:59:35 +0900
+
+libslp-db-util (0.1.0-26) unstable; urgency=low
+
+ * modify db-util.pc for dependency information
+ * Git: 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libslp-db-util-0
+ * Tag: libslp-db-util_0.1.0-26
+
+ -- jinkun.jang <jinkun.jang@samsung.com> Tue, 01 Jun 2010 20:57:04 +0900
+
+libslp-db-util (0.1.0-25) unstable; urgency=low
+
+ * add samsung copyright
+ * Git: 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libslp-db-util-0
+ * Tag: libslp-db-util_0.1.0-25
+
+ -- jinkun.jang <jinkun.jang@samsung.com> Thu, 27 May 2010 12:39:42 +0900
+
+libslp-db-util (0.1.0-24) unstable; urgency=low
+
+ * remove libslp-db-util-0.postinst for file owner & permission
+ * Git: 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libslp-db-util-0
+ * Tag: libslp-db-util_0.1.0-24
+
+ -- jinkun.jang <jinkun.jang@samsung.com> Tue, 11 May 2010 11:27:33 +0900
+
+libslp-db-util (0.1.0-23) unstable; urgency=low
+
+ * add libslp-db-util-0.postinst for file owner & permission
+ * add EXPORT_API for db_util_open_with_options()
+ * Git: 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libslp-db-util-0
+ * Tag: libslp-db-util_0.1.0-23
+
+ -- jinkun.jang <jinkun.jang@samsung.com> Thu, 15 Apr 2010 09:22:41 +0900
+
+libslp-db-util (0.1.0-22) unstable; urgency=low
+
+ * add db_util_open_with_options() interface for sqlite3_open_v2()
+ * add SET_TARGET_PROPERTIES()
+ * Git: 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libslp-db-util-0
+ * Tag: libslp-db-util_0.1.0-22
+
+ -- jinkun.jang <jinkun.jang@samsung.com> Tue, 13 Apr 2010 09:01:01 +0900
+
+libslp-db-util (0.1.0-21) unstable; urgency=low
+
+ * modify header files for c++ guard & hardcoded constants
+ * Git: 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libslp-db-util-0
+ * Tag: libslp-db-util_0.1.0-21
+
+ -- jinkun.jang <jinkun.jang@samsung.com> Tue, 06 Apr 2010 11:18:18 +0900
+
+libslp-db-util (0.1.0-20) unstable; urgency=low
+
+ * remove DOS style lin endings
+ * Git: 165.213.180.234:/git/slp2.0/slp2.0-pkgs/libslp-db-util-0
+ * Tag: libslp-db-util_0.1.0-20
+
+ -- jinkun.jang <jinkun.jang@samsung.com> Mon, 05 Apr 2010 14:03:35 +0900
+
+libslp-db-util (0.1.0-19) unstable; urgency=low
+
+ * upgrade toochain
+
+ -- jinkun.jang <jinkun.jang@samsung.com> Thu, 25 Mar 2010 15:48:13 +0900
+
+libslp-db-util (0.1.0-18) unstable; urgency=low
+
+ * add Busy handler for db_util_open()
+
+ -- jinkun.jang <jinkun.jang@samsung.com> Mon, 08 Mar 2010 17:09:31 +0900
+
+libslp-db-util (0.1.0-17) unstable; urgency=low
+
+ * chage section from non-free to main
+
+ -- jinkun.jang <jinkun.jang@samsung.com> Mon, 08 Mar 2010 09:25:38 +0900
+
+libslp-db-util (0.1.0-16) unstable; urgency=low
+
+ * change section to non-free
+
+ -- jinkun.jang <jinkun.jang@samsung.com> Fri, 26 Feb 2010 10:57:46 +0900
+
+libslp-db-util (0.1.0-15) unstable; urgency=low
+
+ * add '\0' to last character of _szDBPath in util_func.c
+
+ -- jinkun.jang <jinkun.jang@samsung.com> Tue, 23 Feb 2010 21:10:20 +0900
+
+libslp-db-util (0.1.0-14) unstable; urgency=low
+
+ * Enable PERSIST journal mode
+
+ -- Sangjung Woo <sangjung.woo@samsung.com> Wed, 3 Feb 2010 19:37:24 +0900
+
+libslp-db-util (0.1.0-13) unstable; urgency=low
+
+ * Add lucene-index-trigger function
+
+ -- Sangjung Woo <sangjung.woo@samsung.com> Tue, 2 Feb 2010 20:37:24 +0900
+
+libslp-db-util (0.1.0-12) unstable; urgency=low
+
+ * Add Doxygen comments
+
+ -- Sangjung Woo <sangjung.woo@samsung.com> Tue, 2 Feb 2010 16:37:24 +0900
+
+libslp-db-util (0.1.0-11) unstable; urgency=low
+
+ * Modify control file for dependency with other package
+
+ -- jinkun jang <jinkun.jang@samsung.com> Wed, 27 Jan 2010 14:37:24 +0900
+
+libslp-db-util (0.1.0-10) unstable; urgency=low
+
+ * Modify db_util_close() function
+
+ -- Sangjung Woo <sangjung.woo@samsung.com> Wed, 27 Jan 2010 10:00:51 +0900
+
+libslp-db-util (0.1.0-9) unstable; urgency=low
+
+ * PC file changed from SLP-db-util.pc to db-util.pc
+
+ -- jinkun jang <jinkun.jang@samsung.com> Tue, 26 Jan 2010 18:33:51 +0900
+
+libslp-db-util (0.1.0-4) unstable; urgency=low
+
+ * Add debug package
+
+ -- Sangjung Woo <sangjung.woo@samsung.com> Thu, 21 Dec 2009 12:00:03 +0900
+
+libslp-db-util (0.1.0-3) unstable; urgency=low
+
+ * Add db_util_open() and db_util_close()
+
+ -- Sangjung Woo <sangjung.woo@samsung.com> Wen, 20 Dec 2009 17:22:03 +0900
+
+libslp-db-util (0.1.0-2) unstable; urgency=low
+
+ * Rollbacked.
+
+ -- Sangjung Woo <sangjung.woo@samsung.com> Thur, 19 Dec 2009 10:22:03 +0900
+
+libslp-db-util (0.1.0) unstable; urgency=low
+
+ * Initial Release.
+
+ -- Sangjung Woo <sangjung.woo@samsung.com> Thur, 10 Dec 2009 10:22:03 +0900
Priority: optional
Maintainer: Hyungdeuk Kim <hd3.kim@samsung.com> Hakjoo ko <hakjoo.ko@samsung.com>
Uploaders: Hyungdeuk Kim <hd3.kim.@smasung.com> Hakjoo Ko <hakjoo.ko@samsung.com>
-Build-Depends: debhelper (>= 5), autotools-dev, libsqlite3-dev, dlog-dev
+Build-Depends: debhelper (>= 5), autotools-dev, libsqlite3-dev, dlog-dev, libglib2.0-dev, libicu-dev
Standards-Version: 0.1.0
Package: libslp-db-util-dev
Section: main
Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}, libslp-db-util-0 (= ${Source-Version}), libsqlite3-dev, dlog-dev
+Depends: ${shlibs:Depends}, ${misc:Depends}, libslp-db-util-0 (= ${Source-Version}), libsqlite3-dev, dlog-dev, libglib2.0-dev, libicu-dev
Description: libslp-db-util-dev package
Package: libslp-db-util-0
Section: main
Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}, libsqlite3-0, sqlite3, libdlog-0
+Depends: ${shlibs:Depends}, ${misc:Depends}, libsqlite3-0, sqlite3, libdlog-0, libglib2.0-0
Description: libslp-db-util package
Package: libslp-db-util-dbg
CFLAGS ?= -Wall -g
CXXFLAGS ?= -Wall -g
-LDFLAGS ?=
+LDFLAGS ?=
PREFIX ?= /usr
DATADIR ?= /opt
build: build-stamp
-build-stamp: configure-stamp
+build-stamp: configure-stamp
dh_testdir
# Add here commands to compile the package.
rm -f $${f%.in}; \
done
- dh_clean
+ dh_clean
install: build
dh_testdir
dh_testroot
- dh_clean -k
+ dh_prep
dh_installdirs
# Add here commands to install the package into debian/wavplayer.
dh_installexamples
dh_install --sourcedir=debian/tmp
# dh_installmenu
-# dh_installdebconf
+# dh_installdebconf
# dh_installlogrotate
# dh_installemacsen
# dh_installpam
--- /dev/null
+/*
+ * libslp-db-util
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Hakjoo Ko <hakjoo.ko@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __DBUTIL_COLLATION_H__
+#define __DBUTIL_COLLATION_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <db-util-common.h>
+
+/*
+ * Collations Types
+ *
+ * These types are intended for use in the
+ * 2nd parameter to the [db_util_create_collation()] interface.
+ * The meanings of the various types is shown below.
+ *
+ * [DB_UTIL_COL_UCA]
+ * Unicode Collation Algorithm / Locale InSensitive / Accent Sensitive / Case Insensitive
+ * This type will be mostly used in 'ORDER BY' clause of sql for sorted list.
+ *
+ * [DB_UTIL_COL_LS_AS_CI]
+ * Locale Sensitive / Accent Sensitive / Case Insensitive
+ * This type will be mostly used in 'ORDER BY' clause of sql for sorted list.
+ *
+ * [DB_UTIL_COL_LS_AI_CI]
+ * Locale Sensitive / Accent Insensitive / Case Insensitive
+ * This type will be mostly used for '=' operator comparison in 'WHERE' clause.
+
+ * [DB_UTIL_COL_LS_AI_CI_LC]
+ * Locale Sensitive / Accent Insensitive / Loop Comparison
+ * This type will be mostly used for 'LIKE' operator comparison in 'WHERE' clause.
+ *
+ * [DB_UTIL_COL_KR_IC]
+ * Locale Sensitive / Korea / Initial(leading) Consonant
+ * Compares string data using initial(leading) consonant for korea locale.
+ * This type will be mostly used for '=' operator comparison in 'WHERE' clause.
+ *
+ * [DB_UTIL_COL_KR_IC_LC]
+ * Locale Sensitive / Korea / Initial(leading) Consonant / Loop Comparison
+ * Compares string data using initial(leading) consonant for korea locale.
+ * This type will be mostly used for 'LIKE' operator comparison in 'WHERE' clause.
+ */
+
+typedef enum {
+ DB_UTIL_COL_UCA,
+ DB_UTIL_COL_LS_AS_CI,
+ DB_UTIL_COL_LS_AI_CI,
+ DB_UTIL_COL_LS_AI_CI_LC,
+ DB_UTIL_COL_KO_IC,
+ DB_UTIL_COL_KO_IC_LC
+} db_util_collate_type;
+
+/*
+ * Text Encodings
+ *
+ * These encodings are intended for use in the
+ * 3rd parameter to the [db_util_create_collation()] interface.
+ */
+typedef enum {
+ DB_UTIL_COL_UTF8 = SQLITE_UTF8,
+ DB_UTIL_COL_UTF16 = SQLITE_UTF16
+} db_util_collate_textrep;
+
+
+/**
+ * @defgroup DB_UTIL
+ * @ingroup StorageFW
+ * @{
+ */
+
+/**
+ * @fn int db_util_create_collation(sqlite3 *db_handle, db_util_collate_type type, db_util_collate_textrep text_type, char* col_name);
+ * This function defines a new collating sequences with the database connection specified as the firtst argument.
+ * This function is needed to be invoked after [db_util_open()].
+ *
+ * @param[in] Db connection handle to create collation with
+ * @param[in] Collation type. This value must be one of the [db_util_collate_type]
+ * @param[in] Encoding of text passed to the collating function callback
+ * @param[in] The name of collation(UTF-8 string)
+ * return This function returns DB_UTIL_OK or error code on failure
+ * @exception None
+ * @remarks None
+ * @pre Database connected
+ * @post None
+ * @code
+ */
+EXPORT_API int db_util_create_collation(
+ PARAM_IN sqlite3 *db_handle,
+ PARAM_IN db_util_collate_type type,
+ PARAM_IN db_util_collate_textrep text_type,
+ PARAM_IN char* col_name
+);
+
+/**
+*@}
+*/
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __DBUTIL_COLLATION_H__ */
#endif
#include <stdio.h>
+#include <stdlib.h>
#include <stdbool.h>
#include <sqlite3.h>
#define EXPORT_API __attribute__ ((visibility("default")))
#endif
+#ifndef PARAM_IN
+#define PARAM_IN
+#endif
+
+#ifndef PARAM_OUT
+#define PARAM_OUT
+#endif
+
+typedef enum {
+ DB_UTIL_ERROR = SQLITE_ERROR,
+ DB_UTIL_OK = SQLITE_OK,
+} db_util_err;
+
+
#ifdef __cplusplus
}
#endif
*
*/
-#ifndef __DBUTIL_DEBUG_H_
-#define __DBUTIL_DEBUG_H_
+#ifndef __DB_UTIL_DEBUG_H_
+#define __DB_UTIL_DEBUG_H_
#include <stdio.h>
-#define DBUTIL_USING_PLATFORM_DBG
-#define DBUTIL_ENABLE_TRACE
-
-#ifdef DBUTIL_USING_PLATFORM_DBG
+#ifdef DB_UTIL_USING_PLATFORM_DBG
#include <dlog.h>
#ifdef LOG_TAG
#undef LOG_TAG
#define LOG_TAG "DBUTIL"
#endif
-#ifdef DBUTIL_ENABLE_TRACE
+#ifdef DB_UTIL_ENABLE_TRACE
- #ifdef DBUTIL_USING_PLATFORM_DBG
+ #ifdef DB_UTIL_USING_PLATFORM_DBG
- #define DBUTIL_TRACE_DEBUG LOGD
- #define DBUTIL_TRACE_WARNING LOGW
- #define DBUTIL_TRACE_ERROR LOGE
+ #define DB_UTIL_TRACE_DEBUG LOGD
+ #define DB_UTIL_TRACE_WARNING LOGW
+ #define DB_UTIL_TRACE_ERROR LOGE
#else
- #define DBUTIL_TRACE_DEBUG(fmt, arg...) \
+ #define DB_UTIL_TRACE_DEBUG(fmt, arg...) \
do {\
fprintf(stderr,"[DBUTIL]\033[0;32mDEBUG: " fmt "\033[0m\t%s:%d\n", ##arg, strrchr(__FILE__, '/')+1, __LINE__);\
}while(0);
- #define DBUTIL_TRACE_WARNING(fmt, arg...) \
+ #define DB_UTIL_TRACE_WARNING(fmt, arg...) \
do {\
fprintf(stderr,"[DBUTIL]\033[0;33mWARRING: " fmt "\033[0m\t%s:%d\n", ##arg, strrchr(__FILE__, '/')+1, __LINE__);\
}while(0);
- #define DBUTIL_TRACE_ERROR(fmt, arg...) \
+ #define DB_UTIL_TRACE_ERROR(fmt, arg...) \
do {\
fprintf(stderr, "[DBUTIL]\033[0;31mERROR: " fmt "\033[0m\t%s:%d\n", ##arg, strrchr(__FILE__, '/')+1, __LINE__);\
}while(0);
#else
- #define DBUTIL_TRACE_DEBUG(fmt, arg...)
- #define DBUTIL_TRACE_WARNING(fmt, arg...)
- #define DBUTIL_TRACE_ERROR(fmt, arg...)
-
+ #define DB_UTIL_TRACE_DEBUG(fmt, arg...)
+ #define DB_UTIL_TRACE_WARNING(fmt, arg...)
+ #define DB_UTIL_TRACE_ERROR(fmt, arg...)
+
#endif
-#endif /* __DBUTIL_DEBUG_H_ */
+#endif /* __DB_UTIL_DEBUG_H_ */
#endif
#include "util-func.h"
+#include "collation.h"
#ifdef __cplusplus
}
extern "C" {
#endif
-#include <stdio.h>
-#include <sqlite3.h>
-
-#ifndef EXPORT_API
-#define EXPORT_API __attribute__ ((visibility("default")))
-#endif
+#include <db-util-common.h>
#define DB_UTIL_REGISTER_HOOK_METHOD 0x00000001
#define DB_UTIL_LUCENE_INDEX 0x00000002
* @ingroup StorageFW
* @{
*/
+
+
+
+/**
+ * @brief invoke sqlite3_open with platform common configuration
+ * @details register busy handler, create localized collation
+ * @param [in] database file name (UTF-8)
+ * @param [out] SQLite database handle
+ * @param [in] option value
+ * @return sqlite3 function return value will be returned
+ * @see db_util_open_with_options()
+ * @see db_util_close()
+ *
+ */
EXPORT_API int db_util_open(const char *pszFilePath, sqlite3 **ppDB,
- int nOption);
+ int nOption);
+
+/**
+ * @brief invoke sqlite3_open_v2 with platform common configuration
+ * @details register busy handler, create localized collation
+ * @param [in] database file name (UTF-8)
+ * @param [out] SQLite database handle
+ * @param [in] sqlite3_open_v2 flags
+ * @param [in] Name of VFS module to use
+ * @return sqlite3 function return value will be returned
+ * @see db_util_open()
+ * @see db_util_close()
+ *
+ */
EXPORT_API int db_util_open_with_options(const char *pszFilePath,
sqlite3 **ppDB, int flags,
const char *zVfs);
+
+/**
+ * @brief closing a database connection
+ * @param [in] SQLite database handle
+ * @return sqlite3_close function return value will be returned
+ * @see db_util_open()
+ * @see db_util_open_with_options()
+ *
+ */
EXPORT_API int db_util_close(sqlite3 *ppDB);
+
/**
*@}
*/
Name: libslp-db-util
Summary: DB Utility
-Version: 0.1.0
-Release: 49
-Group: TO_BE/FILLED_IN
+Version: 0.1.1
+Release: 0
+Group: System/Libraries
License: Apache License, Version 2.0
-Source0: libslp-db-util-%{version}.tar.gz
+Source0: %{name}-%{version}.tar.gz
Requires(post): /sbin/ldconfig
Requires(postun): /sbin/ldconfig
BuildRequires: cmake
BuildRequires: pkgconfig(sqlite3)
BuildRequires: pkgconfig(dlog)
+BuildRequires: pkgconfig(glib-2.0)
+BuildRequires: pkgconfig(icu-i18n)
%description
-libslp-db-util-dev package
%package devel
Summary: Devel package for libslp-db-util (devel)
Group: Development/Libraries
Requires: %{name} = %{version}-%{release}
-Requires: pkgconfig(sqlite3)
%description devel
rm -rf %{buildroot}
%make_install
-if [ ! -d %{buildroot}/opt/dbspace ]; then
- mkdir -p %{buildroot}/opt/dbspace
-fi
-
%post
/sbin/ldconfig
-
+if [ ! -d /opt/dbspace ]
+then
+ mkdir -p /opt/dbspace
+fi
chown :5000 /opt/dbspace
chmod 775 /opt/dbspace
%files
%defattr(-,root,root,-)
-/opt/dbspace
+%{_libdir}/libSLP-db-util.so
%{_libdir}/libSLP-db-util.so.0
%{_libdir}/libSLP-db-util.so.0.1.0
%defattr(-,root,root,-)
%{_includedir}/db-util/*.h
%{_libdir}/pkgconfig/db-util.pc
-%{_libdir}/libSLP-db-util.so
#include <string.h>
#include <unistd.h>
-#include "db-util-common.h"
#include "util-func.h"
+#include "collation.h"
#include "db-util-debug.h"
-#define BUFSIZE 512
-static char _szDBPath[BUFSIZE] = { 0, };
-
-static int db_util_busyhandler(void *pData, int count)
+static int __db_util_busyhandler(void *pData, int count)
{
if(5 - count > 0) {
- DBUTIL_TRACE_DEBUG("Busy Handler Called! : PID(%d) / CNT(%d)\n", getpid(), count+1);
+ DB_UTIL_TRACE_DEBUG("Busy Handler Called! : PID(%d) / CNT(%d)\n", getpid(), count+1);
usleep((count+1)*100000);
return 1;
} else {
- DBUTIL_TRACE_DEBUG("Busy Handler will be returned SQLITE_BUSY error : PID(%d) \n", getpid());
+ DB_UTIL_TRACE_DEBUG("Busy Handler will be returned SQLITE_BUSY error : PID(%d) \n", getpid());
return 0;
}
}
-int db_util_open(const char *pszFilePath, sqlite3 **ppDB, int nOption)
+static int __db_util_open(sqlite3 *ppDB)
{
- char *pszErrorMsg = NULL;
+ int rc = 0;
- if((pszFilePath == NULL) || (ppDB == NULL)) {
- DBUTIL_TRACE_WARNING("sqlite3 handle null error");
- return -1;
- }
-
- /* Save DB Path & Option */
- strncpy(_szDBPath, pszFilePath, strlen(pszFilePath));
- _szDBPath[strlen(pszFilePath)] = '\0';
-
- /* Open DB */
- int rc = sqlite3_open(pszFilePath, ppDB);
- if (SQLITE_OK != rc) {
- return rc;
+ if(ppDB == NULL) {
+ DB_UTIL_TRACE_WARNING("Invalid input param error");
+ return DB_UTIL_ERROR;
}
-
+
/* Register Busy handler */
- rc = sqlite3_busy_handler(*ppDB, db_util_busyhandler, NULL);
+ rc = sqlite3_busy_handler(ppDB, __db_util_busyhandler, NULL);
if (SQLITE_OK != rc) {
- printf("Fail to register busy handler\n");
- sqlite3_close(*ppDB);
+ DB_UTIL_TRACE_WARNING("Fail to register busy handler\n");
+ sqlite3_close(ppDB);
return rc;
}
-#if SET_PERSIST_JOURNAL_MODE
+#ifdef SET_PERSIST_JOURNAL_MODE
+ /* Code to change default journal mode of sqlite3 is enabled so this option is disabled */
/* Enable persist journal mode */
- rc = sqlite3_exec(*ppDB, "PRAGMA journal_mode = PERSIST",
+ rc = sqlite3_exec(ppDB, "PRAGMA journal_mode = PERSIST",
NULL, NULL, &pszErrorMsg);
if (SQLITE_OK != rc) {
- DBUTIL_TRACE_WARNING("Fail to change journal mode: %d, %d, %s, %s\n", sqlite3_errcode(*ppDB), sqlite3_extended_errcode(*ppDB), pszErrorMsg, sqlite3_errmsg(*ppDB));
+ DB_UTIL_TRACE_WARNING("Fail to change journal mode: %d, %d, %s, %s\n",
+ sqlite3_errcode(ppDB),
+ sqlite3_extended_errcode(ppDB),
+ pszErrorMsg,
+ sqlite3_errmsg(ppDB));
sqlite3_free(pszErrorMsg);
- sqlite3_close(*ppDB);
+ sqlite3_close(ppDB);
return rc;
}
#endif
- return rc;
+
+ db_util_create_collation(ppDB, DB_UTIL_COL_LS_AS_CI,
+ DB_UTIL_COL_UTF8, "localized");
+#if 0
+ if (DB_UTIL_OK != rc) {
+ DB_UTIL_TRACE_WARNING("Fail to create collation");
+ return rc;
+ }
+#endif
+
+ return DB_UTIL_OK;
}
-int db_util_open_with_options(const char *pszFilePath, sqlite3 **ppDB,
- int flags, const char *zVfs)
+int db_util_open(const char *pszFilePath, sqlite3 **ppDB, int nOption)
{
char *pszErrorMsg = NULL;
if((pszFilePath == NULL) || (ppDB == NULL)) {
- DBUTIL_TRACE_WARNING("sqlite3 handle null error");
- return -1;
+ DB_UTIL_TRACE_WARNING("Invalid input param error");
+ return DB_UTIL_ERROR;
}
-
- /* Save DB Path & Option */
- strncpy(_szDBPath, pszFilePath, strlen(pszFilePath));
- _szDBPath[strlen(pszFilePath)] = '\0';
-
+
/* Open DB */
- int rc = sqlite3_open_v2(pszFilePath, ppDB, flags, zVfs);
+ int rc = sqlite3_open(pszFilePath, ppDB);
if (SQLITE_OK != rc) {
return rc;
}
-
- /* Register Busy handler */
- rc = sqlite3_busy_handler(*ppDB, db_util_busyhandler, NULL);
- if (SQLITE_OK != rc) {
- printf("Fail to register busy handler\n");
- sqlite3_close(*ppDB);
- return rc;
+
+ rc = __db_util_open(*ppDB);
+
+ return rc;
+}
+
+int db_util_open_with_options(const char *pszFilePath, sqlite3 **ppDB,
+ int flags, const char *zVfs)
+{
+ char *pszErrorMsg = NULL;
+
+ if((pszFilePath == NULL) || (ppDB == NULL)) {
+ DB_UTIL_TRACE_WARNING("sqlite3 handle null error");
+ return DB_UTIL_ERROR;
}
-
-#if SET_PERSIST_JOURNAL_MODE
- /* Enable persist journal mode */
- rc = sqlite3_exec(*ppDB, "PRAGMA journal_mode = PERSIST",
- NULL, NULL, &pszErrorMsg);
+
+ /* Open DB */
+ int rc = sqlite3_open_v2(pszFilePath, ppDB, flags, zVfs);
if (SQLITE_OK != rc) {
- DBUTIL_TRACE_WARNING("Fail to change journal mode: %s\n", pszErrorMsg);
- sqlite3_free(pszErrorMsg);
- sqlite3_close(*ppDB);
return rc;
}
-#endif
+
+ rc = __db_util_open(*ppDB);
+
return rc;
}
int db_util_close(sqlite3 *ppDB)
{
+ char *pszErrorMsg = NULL;
+
/* Close DB */
int rc = sqlite3_close(ppDB);
- return rc;
+ if (SQLITE_OK != rc) {
+ DB_UTIL_TRACE_WARNING("Fail to change journal mode: %s\n", pszErrorMsg);
+ sqlite3_free(pszErrorMsg);
+ return rc;
+ }
+
+ return DB_UTIL_OK;
}