| #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(); |
| } |