| | #include "sqliteInt.h" |
| | #include "unity.h" |
| | #include <string.h> |
| |
|
| | |
| | extern int test_renameTableSelectCb(Walker *pWalker, Select *pSelect); |
| |
|
| | |
| | static sqlite3 *gDb = NULL; |
| | static Parse gParse; |
| |
|
| | |
| | static SrcList* allocSrcList(int nSrc){ |
| | int nByte = (int)sizeof(SrcList); |
| | if( nSrc>1 ){ |
| | nByte += (nSrc-1) * (int)sizeof(SrcItem); |
| | } |
| | SrcList *p = (SrcList*)sqlite3DbMallocZero(gDb, nByte); |
| | if( p ){ |
| | p->nSrc = (u8)nSrc; |
| | } |
| | return p; |
| | } |
| |
|
| | void setUp(void) { |
| | int rc = sqlite3_open(":memory:", &gDb); |
| | TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc); |
| | memset(&gParse, 0, sizeof(gParse)); |
| | gParse.db = gDb; |
| | } |
| |
|
| | void tearDown(void) { |
| | if( gDb ){ |
| | sqlite3_close(gDb); |
| | gDb = NULL; |
| | } |
| | } |
| |
|
| | |
| | void test_renameTableSelectCb_returns_prune_for_SF_View(void){ |
| | Select s; memset(&s, 0, sizeof(s)); |
| | s.selFlags = SF_View; |
| | |
| | Walker w; memset(&w, 0, sizeof(w)); |
| | RenameCtx rcRename; memset(&rcRename, 0, sizeof(rcRename)); |
| | w.u.pRename = &rcRename; |
| | w.pParse = &gParse; |
| |
|
| | int rc = test_renameTableSelectCb(&w, &s); |
| | TEST_ASSERT_EQUAL_INT(WRC_Prune, rc); |
| | } |
| |
|
| | |
| | void test_renameTableSelectCb_returns_prune_for_SF_CopyCte(void){ |
| | Select s; memset(&s, 0, sizeof(s)); |
| | s.selFlags = SF_CopyCte; |
| | Walker w; memset(&w, 0, sizeof(w)); |
| | RenameCtx rcRename; memset(&rcRename, 0, sizeof(rcRename)); |
| | w.u.pRename = &rcRename; |
| | w.pParse = &gParse; |
| |
|
| | int rc = test_renameTableSelectCb(&w, &s); |
| | TEST_ASSERT_EQUAL_INT(WRC_Prune, rc); |
| | } |
| |
|
| | |
| | void test_renameTableSelectCb_returns_continue_with_empty_src(void){ |
| | Select s; memset(&s, 0, sizeof(s)); |
| | s.selFlags = 0; |
| | s.pWith = 0; |
| | s.pSrc = allocSrcList(0); |
| | TEST_ASSERT_NOT_NULL(s.pSrc); |
| |
|
| | Walker w; memset(&w, 0, sizeof(w)); |
| | RenameCtx rcRename; memset(&rcRename, 0, sizeof(rcRename)); |
| | w.u.pRename = &rcRename; |
| | w.pParse = &gParse; |
| |
|
| | int rc = test_renameTableSelectCb(&w, &s); |
| | TEST_ASSERT_EQUAL_INT(WRC_Continue, rc); |
| |
|
| | sqlite3DbFree(gDb, s.pSrc); |
| | } |
| |
|
| | |
| | void test_renameTableSelectCb_returns_continue_with_non_matching_src(void){ |
| | |
| | Table tWanted; memset(&tWanted, 0, sizeof(tWanted)); |
| | Table tOther; memset(&tOther, 0, sizeof(tOther)); |
| |
|
| | |
| | Select s; memset(&s, 0, sizeof(s)); |
| | s.selFlags = 0; |
| | s.pWith = 0; |
| |
|
| | SrcList *pSrc = allocSrcList(1); |
| | TEST_ASSERT_NOT_NULL(pSrc); |
| | pSrc->a[0].pSTab = &tOther; |
| | pSrc->a[0].zName = "t_other"; |
| | s.pSrc = pSrc; |
| |
|
| | Walker w; memset(&w, 0, sizeof(w)); |
| | RenameCtx rcRename; memset(&rcRename, 0, sizeof(rcRename)); |
| | rcRename.pTab = &tWanted; |
| | w.u.pRename = &rcRename; |
| | w.pParse = &gParse; |
| |
|
| | int rc = test_renameTableSelectCb(&w, &s); |
| | TEST_ASSERT_EQUAL_INT(WRC_Continue, rc); |
| |
|
| | sqlite3DbFree(gDb, s.pSrc); |
| | } |
| |
|
| | int main(void) { |
| | UNITY_BEGIN(); |
| | RUN_TEST(test_renameTableSelectCb_returns_prune_for_SF_View); |
| | RUN_TEST(test_renameTableSelectCb_returns_prune_for_SF_CopyCte); |
| | RUN_TEST(test_renameTableSelectCb_returns_continue_with_empty_src); |
| | RUN_TEST(test_renameTableSelectCb_returns_continue_with_non_matching_src); |
| | return UNITY_END(); |
| | } |