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