Team Ai
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 10mo agoView on Hugging Face
0likes
tests_build_sqlite3HasExplicitNulls.c180 linesDownload Raw Back to tests
1#include "sqliteInt.h"2#include "unity.h"3#include <string.h>4#include <stdlib.h>5#include <stdio.h>6 7/* Global database handle used for Parse allocations in tests */8static sqlite3 *gdb = NULL;9 10void setUp(void) {11  int rc = sqlite3_open(":memory:", &gdb);12  TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc);13  TEST_ASSERT_NOT_NULL(gdb);14}15 16void tearDown(void) {17  if (gdb) {18    sqlite3_close(gdb);19    gdb = NULL;20  }21}22 23/* Helper: initialize a Parse object for testing */24static void initParse(Parse *p){25  memset(p, 0, sizeof(*p));26  p->db = gdb;27}28 29/* Helper: free any zErrMsg associated with Parse */30static void cleanupParse(Parse *p){31  if( p && p->zErrMsg ){32    sqlite3DbFree(p->db, p->zErrMsg);33    p->zErrMsg = 0;34  }35}36 37/* Helper: check substring presence */38static void assertContains(const char *haystack, const char *needle){39  TEST_ASSERT_NOT_NULL(haystack);40  TEST_ASSERT_NOT_NULL(needle);41  TEST_ASSERT_NOT_NULL_MESSAGE(strstr(haystack, needle), "Expected substring not found");42}43 44/* Test: NULL list should yield 0 and no error */45void test_sqlite3HasExplicitNulls_null_list(void){46  Parse p;47  initParse(&p);48 49  int rc = sqlite3HasExplicitNulls(&p, NULL);50  TEST_ASSERT_EQUAL_INT(0, rc);51  TEST_ASSERT_EQUAL_INT(0, p.nErr);52  TEST_ASSERT_EQUAL_PTR(NULL, p.zErrMsg);53 54  cleanupParse(&p);55}56 57/* Test: list with no bNulls set yields 0 and no error */58void test_sqlite3HasExplicitNulls_no_flags(void){59  Parse p;60  initParse(&p);61 62  ExprList list;63  memset(&list, 0, sizeof(list));64  struct ExprList_item items[3];65  memset(items, 0, sizeof(items));66  list.a = items;67  list.nExpr = 3;68 69  /* All items have bNulls = 0 by default due to memset */70  int rc = sqlite3HasExplicitNulls(&p, &list);71  TEST_ASSERT_EQUAL_INT(0, rc);72  TEST_ASSERT_EQUAL_INT(0, p.nErr);73  TEST_ASSERT_EQUAL_PTR(NULL, p.zErrMsg);74 75  cleanupParse(&p);76}77 78/* Test: bNulls set with sortFlags==0 -> "FIRST" */79void test_sqlite3HasExplicitNulls_first_when_sortFlags_0(void){80  Parse p;81  initParse(&p);82 83  ExprList list;84  memset(&list, 0, sizeof(list));85  struct ExprList_item items[2];86  memset(items, 0, sizeof(items));87  list.a = items;88  list.nExpr = 2;89 90  items[0].fg.bNulls = 1;91  items[0].fg.sortFlags = (u8)0;92 93  int rc = sqlite3HasExplicitNulls(&p, &list);94  TEST_ASSERT_EQUAL_INT(1, rc);95  TEST_ASSERT_EQUAL_INT(1, p.nErr);96  assertContains(p.zErrMsg, "unsupported use of NULLS FIRST");97 98  cleanupParse(&p);99}100 101/* Test: bNulls set with sortFlags==1 -> "LAST" */102void test_sqlite3HasExplicitNulls_last_when_sortFlags_1(void){103  Parse p;104  initParse(&p);105 106  ExprList list;107  memset(&list, 0, sizeof(list));108  struct ExprList_item items[2];109  memset(items, 0, sizeof(items));110  list.a = items;111  list.nExpr = 2;112 113  items[0].fg.bNulls = 0;114  items[1].fg.bNulls = 1;115  items[1].fg.sortFlags = (u8)1;116 117  int rc = sqlite3HasExplicitNulls(&p, &list);118  TEST_ASSERT_EQUAL_INT(1, rc);119  TEST_ASSERT_EQUAL_INT(1, p.nErr);120  assertContains(p.zErrMsg, "unsupported use of NULLS LAST");121 122  cleanupParse(&p);123}124 125/* Test: bNulls set with sortFlags==3 -> "FIRST" */126void test_sqlite3HasExplicitNulls_first_when_sortFlags_3(void){127  Parse p;128  initParse(&p);129 130  ExprList list;131  memset(&list, 0, sizeof(list));132  struct ExprList_item items[1];133  memset(items, 0, sizeof(items));134  list.a = items;135  list.nExpr = 1;136 137  items[0].fg.bNulls = 1;138  items[0].fg.sortFlags = (u8)3;139 140  int rc = sqlite3HasExplicitNulls(&p, &list);141  TEST_ASSERT_EQUAL_INT(1, rc);142  TEST_ASSERT_EQUAL_INT(1, p.nErr);143  assertContains(p.zErrMsg, "unsupported use of NULLS FIRST");144 145  cleanupParse(&p);146}147 148/* Test: bNulls set with sortFlags==2 -> "LAST" (any non-0-or-3 value) */149void test_sqlite3HasExplicitNulls_last_when_sortFlags_2(void){150  Parse p;151  initParse(&p);152 153  ExprList list;154  memset(&list, 0, sizeof(list));155  struct ExprList_item items[1];156  memset(items, 0, sizeof(items));157  list.a = items;158  list.nExpr = 1;159 160  items[0].fg.bNulls = 1;161  items[0].fg.sortFlags = (u8)2;162 163  int rc = sqlite3HasExplicitNulls(&p, &list);164  TEST_ASSERT_EQUAL_INT(1, rc);165  TEST_ASSERT_EQUAL_INT(1, p.nErr);166  assertContains(p.zErrMsg, "unsupported use of NULLS LAST");167 168  cleanupParse(&p);169}170 171int main(void) {172  UNITY_BEGIN();173  RUN_TEST(test_sqlite3HasExplicitNulls_null_list);174  RUN_TEST(test_sqlite3HasExplicitNulls_no_flags);175  RUN_TEST(test_sqlite3HasExplicitNulls_first_when_sortFlags_0);176  RUN_TEST(test_sqlite3HasExplicitNulls_last_when_sortFlags_1);177  RUN_TEST(test_sqlite3HasExplicitNulls_first_when_sortFlags_3);178  RUN_TEST(test_sqlite3HasExplicitNulls_last_when_sortFlags_2);179  return UNITY_END();180}