From: SeungYeup Kim Date: Tue, 21 Aug 2012 10:58:56 +0000 (+0900) Subject: tizen 2.0 merge X-Git-Tag: 2.0_alpha^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=HEAD;p=framework%2Fappfw%2Flibslp-db-util.git tizen 2.0 merge --- diff --git a/CMakeLists.txt b/CMakeLists.txt old mode 100644 new mode 100755 index a081bc2..85b926e --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ SET(INCLUDEDIR "\${prefix}/include/db-util") 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) @@ -16,6 +16,8 @@ INCLUDE(FindPkgConfig) pkg_check_modules(pkgs REQUIRED sqlite3 dlog + glib-2.0 + icu-i18n ) FOREACH(flag ${pkgs_CFLAGS}) @@ -28,6 +30,9 @@ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_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) @@ -39,5 +44,7 @@ CONFIGURE_FILE(db-util.pc.in db-util.pc @ONLY) 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) diff --git a/TC/build.sh b/TC/build.sh new file mode 100755 index 0000000..c488da0 --- /dev/null +++ b/TC/build.sh @@ -0,0 +1,20 @@ +#!/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 diff --git a/TC/execute.sh b/TC/execute.sh new file mode 100755 index 0000000..21021c0 --- /dev/null +++ b/TC/execute.sh @@ -0,0 +1,19 @@ +#!/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 diff --git a/TC/tet_code b/TC/tet_code new file mode 100755 index 0000000..a2cf6c1 --- /dev/null +++ b/TC/tet_code @@ -0,0 +1,12 @@ +# 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" diff --git a/TC/tet_scen b/TC/tet_scen new file mode 100755 index 0000000..43cbc9b --- /dev/null +++ b/TC/tet_scen @@ -0,0 +1,7 @@ +all + ^TEST +##### Scenarios for TEST ##### + +# Test scenario +TEST + :include:/unit/tslist diff --git a/TC/tetbuild.cfg b/TC/tetbuild.cfg new file mode 100755 index 0000000..a584acd --- /dev/null +++ b/TC/tetbuild.cfg @@ -0,0 +1,2 @@ +TET_OUTPUT_CAPTURE=False +TET_BUILD_TOOL=make diff --git a/TC/tetclean.cfg b/TC/tetclean.cfg new file mode 100755 index 0000000..c66eda4 --- /dev/null +++ b/TC/tetclean.cfg @@ -0,0 +1,2 @@ +TET_OUTPUT_CAPTURE=False +TET_CLEAN_TOOL=make clean diff --git a/TC/tetexec.cfg b/TC/tetexec.cfg new file mode 100755 index 0000000..0d9d39a --- /dev/null +++ b/TC/tetexec.cfg @@ -0,0 +1 @@ +TET_OUTPUT_CAPTURE=False diff --git a/TC/unit/Makefile b/TC/unit/Makefile new file mode 100755 index 0000000..e82feb8 --- /dev/null +++ b/TC/unit/Makefile @@ -0,0 +1,25 @@ +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) diff --git a/TC/unit/tc_gen.sh b/TC/unit/tc_gen.sh new file mode 100755 index 0000000..54f482d --- /dev/null +++ b/TC/unit/tc_gen.sh @@ -0,0 +1,28 @@ +#!/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" diff --git a/TC/unit/tslist b/TC/unit/tslist new file mode 100755 index 0000000..c221828 --- /dev/null +++ b/TC/unit/tslist @@ -0,0 +1,3 @@ +/unit/utc_ApplicationFW_db_util_close +/unit/utc_ApplicationFW_db_util_open +/unit/utc_ApplicationFW_db_util_open_with_options diff --git a/TC/unit/utc_ApplicationFW_db_util_close.c b/TC/unit/utc_ApplicationFW_db_util_close.c new file mode 100755 index 0000000..3c6f855 --- /dev/null +++ b/TC/unit/utc_ApplicationFW_db_util_close.c @@ -0,0 +1,114 @@ +/* + * libslp-db-util + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Hakjoo Ko + * + * 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 +#include + +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); +} + diff --git a/TC/unit/utc_ApplicationFW_db_util_open.c b/TC/unit/utc_ApplicationFW_db_util_open.c new file mode 100755 index 0000000..feb9780 --- /dev/null +++ b/TC/unit/utc_ApplicationFW_db_util_open.c @@ -0,0 +1,96 @@ +/* + * libslp-db-util + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Hakjoo Ko + * + * 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 +#include + +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); +} diff --git a/TC/unit/utc_ApplicationFW_db_util_open_with_options.c b/TC/unit/utc_ApplicationFW_db_util_open_with_options.c new file mode 100755 index 0000000..7c7b5ef --- /dev/null +++ b/TC/unit/utc_ApplicationFW_db_util_open_with_options.c @@ -0,0 +1,114 @@ +/* + * libslp-db-util + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Hakjoo Ko + * + * 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 +#include + +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); +} + + diff --git a/TC/unit/utc_MODULE_API_func.c.in b/TC/unit/utc_MODULE_API_func.c.in new file mode 100755 index 0000000..e9629be --- /dev/null +++ b/TC/unit/utc_MODULE_API_func.c.in @@ -0,0 +1,62 @@ +#include + +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); +} diff --git a/collation.c b/collation.c new file mode 100755 index 0000000..64c7a25 --- /dev/null +++ b/collation.c @@ -0,0 +1,558 @@ +/* + * libslp-db-util + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Hakjoo Ko + * + * 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 +#include +#include +#include + +#include +#include + +#include + +#include +#include +#include +#include + +#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 v2_char_len) { + for(i=0;i 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 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 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 Wed, 07 Dec 2011 14:40:37 +0900 + -- Hyungdeuk Kim 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 Mon, 05 Apr 2010 14:03:35 +0900 + +libslp-db-util (0.1.0-19) unstable; urgency=low + + * upgrade toochain + + -- jinkun.jang 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 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 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 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 Tue, 23 Feb 2010 21:10:20 +0900 + +libslp-db-util (0.1.0-14) unstable; urgency=low + + * Enable PERSIST journal mode + + -- Sangjung Woo 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 Tue, 2 Feb 2010 20:37:24 +0900 + +libslp-db-util (0.1.0-12) unstable; urgency=low + + * Add Doxygen comments + + -- Sangjung Woo 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 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 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 Tue, 26 Jan 2010 18:33:51 +0900 + +libslp-db-util (0.1.0-4) unstable; urgency=low + + * Add debug package + + -- Sangjung Woo 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 Wen, 20 Dec 2009 17:22:03 +0900 + +libslp-db-util (0.1.0-2) unstable; urgency=low + + * Rollbacked. + + -- Sangjung Woo Thur, 19 Dec 2009 10:22:03 +0900 + +libslp-db-util (0.1.0) unstable; urgency=low + + * Initial Release. + + -- Sangjung Woo Thur, 10 Dec 2009 10:22:03 +0900 diff --git a/debian/control b/debian/control old mode 100644 new mode 100755 index cfa75b8..298c924 --- a/debian/control +++ b/debian/control @@ -3,19 +3,19 @@ Section: main Priority: optional Maintainer: Hyungdeuk Kim Hakjoo ko Uploaders: Hyungdeuk Kim Hakjoo Ko -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 diff --git a/debian/rules b/debian/rules index 22396e1..ad831a0 100755 --- a/debian/rules +++ b/debian/rules @@ -11,7 +11,7 @@ CFLAGS ?= -Wall -g CXXFLAGS ?= -Wall -g -LDFLAGS ?= +LDFLAGS ?= PREFIX ?= /usr DATADIR ?= /opt @@ -35,7 +35,7 @@ configure-stamp: build: build-stamp -build-stamp: configure-stamp +build-stamp: configure-stamp dh_testdir # Add here commands to compile the package. @@ -69,12 +69,12 @@ clean: 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. @@ -94,7 +94,7 @@ binary-arch: build install dh_installexamples dh_install --sourcedir=debian/tmp # dh_installmenu -# dh_installdebconf +# dh_installdebconf # dh_installlogrotate # dh_installemacsen # dh_installpam diff --git a/include/collation.h b/include/collation.h new file mode 100755 index 0000000..dff9c53 --- /dev/null +++ b/include/collation.h @@ -0,0 +1,122 @@ +/* + * libslp-db-util + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Hakjoo Ko + * + * 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 + +/* + * 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__ */ diff --git a/include/db-util-common.h b/include/db-util-common.h index 11d4915..4229d5a 100755 --- a/include/db-util-common.h +++ b/include/db-util-common.h @@ -27,6 +27,7 @@ extern "C" { #endif #include +#include #include #include @@ -34,6 +35,20 @@ extern "C" { #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 diff --git a/include/db-util-debug.h b/include/db-util-debug.h index ca5def0..c7b226b 100755 --- a/include/db-util-debug.h +++ b/include/db-util-debug.h @@ -19,14 +19,11 @@ * */ -#ifndef __DBUTIL_DEBUG_H_ -#define __DBUTIL_DEBUG_H_ +#ifndef __DB_UTIL_DEBUG_H_ +#define __DB_UTIL_DEBUG_H_ #include -#define DBUTIL_USING_PLATFORM_DBG -#define DBUTIL_ENABLE_TRACE - -#ifdef DBUTIL_USING_PLATFORM_DBG +#ifdef DB_UTIL_USING_PLATFORM_DBG #include #ifdef LOG_TAG #undef LOG_TAG @@ -34,27 +31,27 @@ #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); @@ -63,10 +60,10 @@ #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_ */ diff --git a/include/db-util.h b/include/db-util.h index e300eed..36b47c6 100755 --- a/include/db-util.h +++ b/include/db-util.h @@ -27,6 +27,7 @@ extern "C" { #endif #include "util-func.h" +#include "collation.h" #ifdef __cplusplus } diff --git a/include/util-func.h b/include/util-func.h index 8cf8d0d..951584d 100755 --- a/include/util-func.h +++ b/include/util-func.h @@ -26,12 +26,7 @@ extern "C" { #endif -#include -#include - -#ifndef EXPORT_API -#define EXPORT_API __attribute__ ((visibility("default"))) -#endif +#include #define DB_UTIL_REGISTER_HOOK_METHOD 0x00000001 #define DB_UTIL_LUCENE_INDEX 0x00000002 @@ -46,12 +41,49 @@ extern "C" { * @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); + /** *@} */ diff --git a/packaging/libslp-db-util.spec b/packaging/libslp-db-util.spec index 75039b2..e5e373f 100644 --- a/packaging/libslp-db-util.spec +++ b/packaging/libslp-db-util.spec @@ -1,24 +1,24 @@ 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 @@ -34,13 +34,12 @@ make %{?jobs:-j%jobs} 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 @@ -48,7 +47,7 @@ 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 @@ -56,5 +55,4 @@ chmod 775 /opt/dbspace %defattr(-,root,root,-) %{_includedir}/db-util/*.h %{_libdir}/pkgconfig/db-util.pc -%{_libdir}/libSLP-db-util.so diff --git a/util_func.c b/util_func.c index 48a0964..ba242f3 100755 --- a/util_func.c +++ b/util_func.c @@ -22,113 +22,122 @@ #include #include -#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; }