Team Ai
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 10mo agoView on Hugging Face
0likes
tests_resolve_sqlite3MatchEName.c163 linesDownload Raw Back to tests
1#include "sqliteInt.h"2#include "unity.h"3#include <string.h>4#include <stdlib.h>5 6/* Helper to create an ExprList_item with specified eEName and zEName */7static struct ExprList_item makeItem(const char *zQualified, int eEName){8  struct ExprList_item it;9  memset(&it, 0, sizeof(it));10  it.zEName = (char*)zQualified;11  it.fg.eEName = (u8)eEName;12  return it;13}14 15void setUp(void) {16  /* No global setup required */17}18 19void tearDown(void) {20  /* No global teardown required */21}22 23/* ENAME_TAB: Full match with case-insensitivity on db, table, column */24void test_sqlite3MatchEName_ENAME_TAB_full_match_case_insensitive(void) {25  struct ExprList_item it = makeItem("main.Users.Name", ENAME_TAB);26  int pb = 0;27  int rc = sqlite3MatchEName(&it, "NAME", "users", "MAIN", &pb);28  TEST_ASSERT_EQUAL_INT(1, rc);29  TEST_ASSERT_EQUAL_INT(0, pb); /* pbRowid unchanged for ENAME_TAB */30}31 32/* ENAME_TAB: zDb and zCol NULL act as wildcards */33void test_sqlite3MatchEName_ENAME_TAB_db_and_col_null(void) {34  struct ExprList_item it = makeItem("main.Users.Name", ENAME_TAB);35  int pb = 0;36  int rc = sqlite3MatchEName(&it, NULL, "Users", NULL, &pb);37  TEST_ASSERT_EQUAL_INT(1, rc);38  TEST_ASSERT_EQUAL_INT(0, pb);39}40 41/* ENAME_TAB: mismatch on database component */42void test_sqlite3MatchEName_ENAME_TAB_db_mismatch(void) {43  struct ExprList_item it = makeItem("main.Users.Name", ENAME_TAB);44  int pb = 0;45  int rc = sqlite3MatchEName(&it, "Name", "Users", "temp", &pb);46  TEST_ASSERT_EQUAL_INT(0, rc);47  TEST_ASSERT_EQUAL_INT(0, pb);48}49 50/* ENAME_TAB: mismatch on table component */51void test_sqlite3MatchEName_ENAME_TAB_table_mismatch(void) {52  struct ExprList_item it = makeItem("main.Users.Name", ENAME_TAB);53  int pb = 0;54  int rc = sqlite3MatchEName(&it, "Name", "Accounts", "main", &pb);55  TEST_ASSERT_EQUAL_INT(0, rc);56  TEST_ASSERT_EQUAL_INT(0, pb);57}58 59/* ENAME_TAB: mismatch on column component */60void test_sqlite3MatchEName_ENAME_TAB_column_mismatch(void) {61  struct ExprList_item it = makeItem("main.Users.Name", ENAME_TAB);62  int pb = 0;63  int rc = sqlite3MatchEName(&it, "Age", "Users", "main", &pb);64  TEST_ASSERT_EQUAL_INT(0, rc);65  TEST_ASSERT_EQUAL_INT(0, pb);66}67 68/* ENAME_TAB: ensure db name must be exact length (zDb[n]==0 enforcement) */69void test_sqlite3MatchEName_ENAME_TAB_db_length_mismatch(void) {70  struct ExprList_item it = makeItem("main.Users.Name", ENAME_TAB);71  int pb = 0;72  /* "mainX" should fail even though it starts with "main" */73  int rc = sqlite3MatchEName(&it, "Name", "Users", "mainX", &pb);74  TEST_ASSERT_EQUAL_INT(0, rc);75  TEST_ASSERT_EQUAL_INT(0, pb);76}77 78/* ENAME_TAB: zCol NULL matches any column */79void test_sqlite3MatchEName_ENAME_TAB_col_null_matches_any(void) {80  struct ExprList_item it = makeItem("main.Users.Name", ENAME_TAB);81  int pb = 0;82  int rc = sqlite3MatchEName(&it, NULL, "Users", "main", &pb);83  TEST_ASSERT_EQUAL_INT(1, rc);84  TEST_ASSERT_EQUAL_INT(0, pb);85}86 87/* ENAME_ROWID: zCol NULL acceptable, sets pbRowid=1 on success */88void test_sqlite3MatchEName_ENAME_ROWID_col_null_sets_pbRowid(void) {89  struct ExprList_item it = makeItem("main.T1.rowid", ENAME_ROWID);90  int pb = 0;91  int rc = sqlite3MatchEName(&it, NULL, "t1", "MAIN", &pb);92  TEST_ASSERT_EQUAL_INT(1, rc);93  TEST_ASSERT_EQUAL_INT(1, pb);94}95 96/* ENAME_ROWID: zCol is "rowid" (case-insensitive), sets pbRowid */97void test_sqlite3MatchEName_ENAME_ROWID_col_rowid_alias_rowid(void) {98  struct ExprList_item it = makeItem("main.T1._rowid_", ENAME_ROWID);99  int pb = 0;100  int rc = sqlite3MatchEName(&it, "ROWID", "t1", "main", &pb);101  TEST_ASSERT_EQUAL_INT(1, rc);102  TEST_ASSERT_EQUAL_INT(1, pb);103}104 105/* ENAME_ROWID: zCol is "oid" alias, sets pbRowid */106void test_sqlite3MatchEName_ENAME_ROWID_col_rowid_alias_oid(void) {107  struct ExprList_item it = makeItem("main.T1.rowid", ENAME_ROWID);108  int pb = 0;109  int rc = sqlite3MatchEName(&it, "oid", "T1", "MAIN", &pb);110  TEST_ASSERT_EQUAL_INT(1, rc);111  TEST_ASSERT_EQUAL_INT(1, pb);112}113 114/* ENAME_ROWID: zCol is not a rowid alias -> no match, pbRowid unchanged */115void test_sqlite3MatchEName_ENAME_ROWID_non_alias_col(void) {116  struct ExprList_item it = makeItem("main.T1.rowid", ENAME_ROWID);117  int pb = 0;118  int rc = sqlite3MatchEName(&it, "id", "t1", "main", &pb);119  TEST_ASSERT_EQUAL_INT(0, rc);120  TEST_ASSERT_EQUAL_INT(0, pb);121}122 123/* ENAME_ROWID: mismatch on db or table causes failure */124void test_sqlite3MatchEName_ENAME_ROWID_db_or_table_mismatch(void) {125  struct ExprList_item it = makeItem("main.T1.rowid", ENAME_ROWID);126  int pb = 0;127  int rc1 = sqlite3MatchEName(&it, NULL, "T2", "main", &pb);128  TEST_ASSERT_EQUAL_INT(0, rc1);129  TEST_ASSERT_EQUAL_INT(0, pb);130 131  pb = 0;132  int rc2 = sqlite3MatchEName(&it, NULL, "T1", "temp", &pb);133  TEST_ASSERT_EQUAL_INT(0, rc2);134  TEST_ASSERT_EQUAL_INT(0, pb);135}136 137/* ENAME_ROWID: pbRowid must be non-NULL; if NULL, function returns 0 early */138void test_sqlite3MatchEName_ENAME_ROWID_null_pbRowid_returns0(void) {139  struct ExprList_item it = makeItem("main.T1.rowid", ENAME_ROWID);140  int rc = sqlite3MatchEName(&it, NULL, "T1", "main", NULL);141  TEST_ASSERT_EQUAL_INT(0, rc);142}143 144int main(void) {145  UNITY_BEGIN();146 147  RUN_TEST(test_sqlite3MatchEName_ENAME_TAB_full_match_case_insensitive);148  RUN_TEST(test_sqlite3MatchEName_ENAME_TAB_db_and_col_null);149  RUN_TEST(test_sqlite3MatchEName_ENAME_TAB_db_mismatch);150  RUN_TEST(test_sqlite3MatchEName_ENAME_TAB_table_mismatch);151  RUN_TEST(test_sqlite3MatchEName_ENAME_TAB_column_mismatch);152  RUN_TEST(test_sqlite3MatchEName_ENAME_TAB_db_length_mismatch);153  RUN_TEST(test_sqlite3MatchEName_ENAME_TAB_col_null_matches_any);154 155  RUN_TEST(test_sqlite3MatchEName_ENAME_ROWID_col_null_sets_pbRowid);156  RUN_TEST(test_sqlite3MatchEName_ENAME_ROWID_col_rowid_alias_rowid);157  RUN_TEST(test_sqlite3MatchEName_ENAME_ROWID_col_rowid_alias_oid);158  RUN_TEST(test_sqlite3MatchEName_ENAME_ROWID_non_alias_col);159  RUN_TEST(test_sqlite3MatchEName_ENAME_ROWID_db_or_table_mismatch);160  RUN_TEST(test_sqlite3MatchEName_ENAME_ROWID_null_pbRowid_returns0);161 162  return UNITY_END();163}