Beispiel #1
0
CUNIT_TEST(DBSuite, _string_literal)
{
    EagleDbInstance *db = EagleInstanceTest(10);
    EagleBoolean success;
    EagleLoggerEvent *error = NULL;

    success = EagleDbInstance_execute(db, "CREATE TABLE mytable2 (col1 int, col2 text);", &error);
    if (EagleFalse == success) {
        CUNIT_FAIL("%s", error->message);
    }
    CUNIT_ASSERT_TRUE(success);

    success = EagleDbInstance_execute(db, "INSERT INTO mytable2 (col1, col2) VALUES (123, 'some '' cool \' text');", &error);
    if (EagleFalse == success) {
        CUNIT_FAIL("%s", error->message);
    }
    CUNIT_ASSERT_TRUE(success);

    // SELECT data back
    EagleDbParser *p = EagleDbParser_ParseWithString("SELECT col1, col2, 'some string' FROM mytable2;");
    CUNIT_ASSERT_FALSE(EagleDbParser_hasError(p));

    EaglePlan *plan = EagleDbSqlSelect_parse((EagleDbSqlSelect*) p->yyparse_ast, db);
    //printf("%s\n", EaglePlan_toString(plan));

    // catch compilation error
    CUNIT_ASSERT_FALSE(EaglePlan_isError(plan));

    // execute
    EagleInstance *eagle = EagleInstance_New(1);
    EagleInstance_addPlan(eagle, plan);
    EagleInstance_run(eagle);

    // validate data
    EaglePage *page1 = EaglePageProvider_nextPage(plan->result[0]);
    EaglePage *page2 = EaglePageProvider_nextPage(plan->result[1]);
    EaglePage *page3 = EaglePageProvider_nextPage(plan->result[2]);

    CUNIT_ASSERT_EQUAL_INT(page1->type, EagleDataTypeInteger);
    CUNIT_ASSERT_EQUAL_INT(page2->type, EagleDataTypeVarchar);
    CUNIT_ASSERT_EQUAL_INT(page3->type, EagleDataTypeVarchar);
    CUNIT_ASSERT_EQUAL_INT(1, page1->count);
    CUNIT_ASSERT_EQUAL_INT(1, page2->count);
    CUNIT_ASSERT_EQUAL_INT(10, page3->count);
    CUNIT_ASSERT_EQUAL_INT(((int*) page1->data)[0], 123);
    CUNIT_ASSERT_EQUAL_STRING(((char**) page2->data)[0], "some ' cool ' text");
    CUNIT_ASSERT_EQUAL_STRING(((char**) page3->data)[0], "some string");

    EaglePage_Delete(page1);
    EaglePage_Delete(page2);
    EaglePage_Delete(page3);

    EagleInstance_Delete(eagle);
    EaglePlan_Delete(plan);

    EagleDbSqlSelect_DeleteRecursive((EagleDbSqlSelect*) p->yyparse_ast);
    EagleDbParser_Delete(p);

    EagleInstanceTest_Cleanup(db);
}
Beispiel #2
0
CUNIT_TEST(MainSuite, EaglePageProviderVirtual_New)
{
    // create a virtual provider that acts like a single provider
    EaglePageProviderSingle *single = EaglePageProviderSingle_NewInt(123, 1, "name");
    EaglePageProviderVirtual *epp = EaglePageProviderVirtual_New(single->recordsPerPage,
                                    "name2",
                                    EagleDataTypeInteger,
                                    single,
                                    (void (*)(void*)) EaglePageProvider_Delete,
                                    (EagleBoolean(*)(void*, void*)) EaglePageProvider_add,
                                    (int (*)(void*)) EaglePageProvider_pagesRemaining,
                                    (EaglePage * (*)(void*)) EaglePageProvider_nextPage,
                                    (void (*)(void*)) EaglePageProvider_reset,
                                    (EaglePage * (*)(void*, int)) EaglePageProvider_getPage);

    // add
    CUNIT_VERIFY_EQUAL_INT(EaglePageProvider_add((EaglePageProvider*) epp, NULL), EaglePageProvider_add((EaglePageProvider*) single, NULL));

    // pagesRemaining
    CUNIT_VERIFY_EQUAL_INT(EaglePageProvider_pagesRemaining((EaglePageProvider*) epp), EaglePageProvider_pagesRemaining((EaglePageProvider*) single));

    // nextPage
    EaglePage *page1 = EaglePageProvider_nextPage((EaglePageProvider*) epp);
    EaglePage *page2 = EaglePageProvider_nextPage((EaglePageProvider*) single);
    CUNIT_VERIFY_EQUAL_INT(page1->count, page2->count);
    CUNIT_VERIFY_EQUAL_INT(page1->totalSize, page2->totalSize);
    EaglePage_Delete(page1);
    EaglePage_Delete(page2);

    // reset
    EaglePageProvider_reset((EaglePageProvider*) epp);
    EaglePageProvider_reset((EaglePageProvider*) single);

    EaglePageProvider_Delete((EaglePageProvider*) epp);
}
Beispiel #3
0
CUNIT_TEST(MemorySuite, EaglePage_CopyFloat_)
{
    EagleMemory_MockInit();
    EagleMemory_Mock("EaglePage_CopyFloat_.1");
    
    EaglePage *page = EaglePage_AllocFloat(1);
    CUNIT_VERIFY_NULL(EaglePage_RealCopyFloat_(page));
    EaglePage_Delete(page);
    
    CUNIT_ASSERT_EQUAL_INT(EagleMemory_GetMockInvocations(), 1);
    EagleMemory_MockFinish();
}
Beispiel #4
0
CUNIT_TEST(DBSuite, EagleDbInformationSchema_tables)
{
    int cores = 1;
    EagleDbInstance *db = EagleDbInstance_New(10, cores);

    /* parse sql */
    EagleDbParser *p = EagleDbParser_ParseWithString("select table_schema, table_name from information_schema_tables;");
    if (EagleTrue == EagleDbParser_hasError(p)) {
        CUNIT_FAIL("%s", EagleDbParser_lastError(p));
    }
    CUNIT_ASSERT_FALSE(EagleDbParser_hasError(p));

    EaglePlan *plan = EagleDbSqlSelect_parse((EagleDbSqlSelect*) p->yyparse_ast, db);
    if (EagleTrue == EaglePlan_isError(plan)) {
        CUNIT_FAIL("%s", plan->errorMessage);
    }
    CUNIT_ASSERT_FALSE(EaglePlan_isError(plan));

    /* execute */
    EagleInstance *eagle = EagleInstance_New(cores);
    EagleInstance_addPlan(eagle, plan);
    EagleInstance_run(eagle);

    /* check results */
    EaglePage *page1 = EaglePageProvider_nextPage(plan->result[0]);
    EaglePage *page2 = EaglePageProvider_nextPage(plan->result[1]);
    CUNIT_ASSERT_NOT_NULL(page1);
    CUNIT_ASSERT_NOT_NULL(page2);

    EaglePage_Delete(page1);
    EaglePage_Delete(page2);

    EagleDbSqlExpression_DeleteRecursive((EagleDbSqlExpression*) p->yyparse_ast);
    EaglePlan_Delete(plan);
    EagleInstance_Delete(eagle);
    EagleDbParser_Delete(p);
    EagleDbInstance_Delete(db);
}