1616
1717#include "dds/ddsrt/heap.h"
1818#include "dds/ddsrt/string.h"
19+ #include "dds__serdata_default.h"
1920#include "dds__filter.h"
2021#include "dds__types.h"
2122#include "dds__sql_expr.h"
@@ -126,17 +127,27 @@ CU_Test(ddsc_expr_filter, accept)
126127 const void * sample ;
127128 const bool result ;
128129 } test [] = {
129- {{ .expr = "`e1`=0" , .param = "" , .tdesc = Space_invalid_data_desc }, .sample = & (struct Space_invalid_data ){.e1 = Space_IDE0 }, .result = true },
130- {{ .expr = "`bm1`=(1 << 0)" , .param = "" , .tdesc = Space_invalid_data_desc }, .sample = & (struct Space_invalid_data ){.bm1 = Space_IDB0 }, .result = true },
131- /* {{ .expr="`um_sub1.m_int32`=0", .param="", .tdesc=dunion_desc }, .sample=&(struct dunion){._d=16,._u.um_sub1.m_int32=0}, .result = false }, */
132- {{ .expr = "e.z.a = d.z.a" , .param = "" , .tdesc = SerdataKeyNestedFinalImplicit_desc }, .sample = & (struct SerdataKeyNestedFinalImplicit ){.e .z .a = 1U ,.d .z .a = 0U }, .result = false },
133- {{ .expr = "b = by OR by = bx.ny" , .param = "" , .tdesc = SerdataKeyInheritMutable_desc }, .sample = & (struct SerdataKeyInheritMutable ){.b = 1U ,.parent = {.by = 0U ,.bx .ny = 0U }}, .result = true },
134- {{ .expr = "b == \'abc\'" , .param = "" , .tdesc = SerdataKeyStringBounded_desc }, .sample = & (struct SerdataKeyStringBounded ){.a = 1U ,.b = "abc" }, .result = true },
135- {{ .expr = "b == \'abcd\'" , .param = "" , .tdesc = SerdataKeyString_desc }, .sample = & (struct SerdataKeyString ){.a = 1U ,.b = "abcd" }, .result = true },
136- {{ .expr = "a + b" , .param = "" , .tdesc = SerdataKeyOrder_desc }, .sample = & (struct SerdataKeyOrder ){.a = 1U ,.b = 1U ,.c = 0U }, .result = true },
137- {{ .expr = "a + b OR ?1 * c" , .param = "0" , .tdesc = SerdataKeyOrderId_desc }, .sample = & (struct SerdataKeyOrderId ){.a = 1U ,.b = 0U ,.c = 0U }, .result = true },
138- {{ .expr = "x AND y OR z.b" , .param = "" , .tdesc = SerdataKeyOrderFinalNestedMutable_desc }, .sample = & (struct SerdataKeyOrderFinalNestedMutable ){.x = 0U ,.y = 0U ,.z .b = 1U }, .result = true },
139- {{ .expr = "d.x AND d.z.c OR e.x" , .param = "" , .tdesc = SerdataKeyNestedFinalImplicit_desc }, .sample = & (struct SerdataKeyNestedFinalImplicit ){.d .x = 1U ,.d .z .c = 0U ,.e .x = 0U }, .result = false },
130+ {{ .expr = "`e1`=0" , .param = "" , .tdesc = Space_invalid_data_desc }, .sample = & (struct Space_invalid_data ){.e1 = Space_IDE0 }, .result = true },
131+ {{ .expr = "`bm1`=(1 << 0)" , .param = "" , .tdesc = Space_invalid_data_desc }, .sample = & (struct Space_invalid_data ){.bm1 = Space_IDB0 }, .result = true },
132+ {{ .expr = "b == \'abc\'" , .param = "" , .tdesc = SerdataKeyStringBounded_desc }, .sample = & (struct SerdataKeyStringBounded ){.a = 1U ,.b = "abc" }, .result = true },
133+ {{ .expr = "b == \'abcd\'" , .param = "" , .tdesc = SerdataKeyString_desc }, .sample = & (struct SerdataKeyString ){.a = 1U ,.b = "abcd" }, .result = true },
134+ /* FIXME: unsupported case because of "union" keys limitation.
135+ * {{ .expr="`um_sub1.m_int32`=0", .param="", .tdesc=dunion_desc }, .sample=&(struct dunion){._d=16,._u.um_sub1.m_int32=0}, .result = false }, */
136+ #ifdef DDS_HAS_TYPELIB
137+ {{ .expr = "e.z.a = d.z.a" , .param = "" , .tdesc = SerdataKeyNestedFinalImplicit_desc }, .sample = & (struct SerdataKeyNestedFinalImplicit ){.e .z .a = 1U ,.d .z .a = 0U }, .result = false },
138+ {{ .expr = "b = by OR by = bx.ny" , .param = "" , .tdesc = SerdataKeyInheritMutable_desc }, .sample = & (struct SerdataKeyInheritMutable ){.b = 1U ,.parent = {.by = 0U ,.bx .ny = 0U }}, .result = true },
139+ {{ .expr = "a + b" , .param = "" , .tdesc = SerdataKeyOrder_desc }, .sample = & (struct SerdataKeyOrder ){.a = 1U ,.b = 1U ,.c = 0U }, .result = true },
140+ {{ .expr = "a + b OR ?1 * c" , .param = "0" , .tdesc = SerdataKeyOrderId_desc }, .sample = & (struct SerdataKeyOrderId ){.a = 1U ,.b = 0U ,.c = 0U }, .result = true },
141+ {{ .expr = "x AND y OR z.b" , .param = "" , .tdesc = SerdataKeyOrderFinalNestedMutable_desc }, .sample = & (struct SerdataKeyOrderFinalNestedMutable ){.x = 0U ,.y = 0U ,.z .b = 1U }, .result = true },
142+ {{ .expr = "d.x AND d.z.c OR e.x" , .param = "" , .tdesc = SerdataKeyNestedFinalImplicit_desc }, .sample = & (struct SerdataKeyNestedFinalImplicit ){.d .x = 1U ,.d .z .c = 0U ,.e .x = 0U }, .result = false },
143+ #else
144+ {{ .expr = "d.z.a = d.z.c" , .param = "" , .tdesc = SerdataKeyNestedFinalImplicit_desc }, .sample = & (struct SerdataKeyNestedFinalImplicit ){.d .z .a = 1U ,.d .z .c = 0U }, .result = false },
145+ {{ .expr = "bx.nz=bz OR bz=bx.nx" , .param = "" , .tdesc = SerdataKeyInheritMutable_desc }, .sample = & (struct SerdataKeyInheritMutable ){.parent = {.bz = 1U ,.bx .nz = 1U ,.bx .nx = 1U }}, .result = true },
146+ {{ .expr = "a + c" , .param = "" , .tdesc = SerdataKeyOrder_desc }, .sample = & (struct SerdataKeyOrder ){.a = 1U ,.c = 0U }, .result = true },
147+ {{ .expr = "a + c OR ?1 * c" , .param = "0" , .tdesc = SerdataKeyOrderId_desc }, .sample = & (struct SerdataKeyOrderId ){.a = 1U ,.c = 0U }, .result = true },
148+ {{ .expr = "x AND z.c OR z.a" , .param = "" , .tdesc = SerdataKeyOrderFinalNestedMutable_desc }, .sample = & (struct SerdataKeyOrderFinalNestedMutable ){.x = 0U ,.z .c = 0U ,.z .b = 1U }, .result = false },
149+ {{ .expr = "d.x AND d.z.c OR f" , .param = "" , .tdesc = SerdataKeyNestedFinalImplicit_desc }, .sample = & (struct SerdataKeyNestedFinalImplicit ){.d .x = 1U ,.d .z .c = 0U ,.f = 0U }, .result = false },
150+ #endif
140151 };
141152
142153 size_t ntest = sizeof (test ) / sizeof (test [0 ]);
@@ -150,9 +161,11 @@ CU_Test(ddsc_expr_filter, accept)
150161 ret = init_dds_expression_filter (participant , & test [i ].b , & flt );
151162 CU_ASSERT (ret == DDS_RETCODE_OK );
152163
164+ #ifdef DDS_HAS_TYPELIB
153165 /* validate that result descriptor created correctly */
154- const dds_topic_descriptor_t * new_desc = ((struct dds_expression_filter * )flt )-> desc ;
155- CU_ASSERT (((struct dds_expression_filter * )flt )-> bin_expr -> nparams == new_desc -> m_nkeys );
166+ const struct dds_cdrstream_desc new_desc = ((struct dds_sertype_default * )(((struct dds_expression_filter * )flt )-> st ))-> type ;
167+ CU_ASSERT (((struct dds_expression_filter * )flt )-> bin_expr -> nparams == new_desc .keys .nkeys );
168+ #endif
156169
157170 bool res = dds_filter_writer_accept (flt , NULL , test [i ].sample );
158171 CU_ASSERT (res == test [i ].result );
@@ -171,9 +184,15 @@ CU_Test(ddsc_expr_filter, init_fini)
171184 char * fields ; // keyed field on a result type sep. by ' '
172185 } expec ;
173186 } test [] = {
174- {{ .expr = "a + b + c" , .param = "" , .tdesc = SerdataKeyOrder_desc }, .expec = {"`a` `b` `c`" } },
175- {{ .expr = "a + b OR ?1 * c" , .param = "0" , .tdesc = SerdataKeyOrderId_desc }, .expec = {"`a` `b`" } },
176- {{ .expr = "x AND y OR z.b" , .param = "" , .tdesc = SerdataKeyOrderFinalNestedMutable_desc }, .expec = {"`x` `y` `z.b`" } }
187+ #ifdef DDS_HAS_TYPELIB
188+ {{ .expr = "a + b + c" , .param = "" , .tdesc = SerdataKeyOrder_desc }, .expec = {"`a` `b` `c`" } },
189+ {{ .expr = "a + b OR ?1 * c" , .param = "0" , .tdesc = SerdataKeyOrderId_desc }, .expec = {"`a` `b`" } },
190+ {{ .expr = "x AND y OR z.b" , .param = "" , .tdesc = SerdataKeyOrderFinalNestedMutable_desc }, .expec = {"`x` `y` `z.b`" } }
191+ #else
192+ {{ .expr = "a" , .param = "" , .tdesc = SerdataKeyOrder_desc }, .expec = {"`a` `c`" } },
193+ {{ .expr = "a OR ?1 * c" , .param = "0" , .tdesc = SerdataKeyOrderId_desc }, .expec = {"`a` `c`" } },
194+ {{ .expr = "x OR z.a" , .param = "" , .tdesc = SerdataKeyOrderFinalNestedMutable_desc }, .expec = {"`x` `z.a` `z.c`" } }
195+ #endif
177196 };
178197
179198 size_t ntest = sizeof (test ) / sizeof (test [0 ]);
@@ -188,8 +207,10 @@ CU_Test(ddsc_expr_filter, init_fini)
188207 CU_ASSERT (ret == DDS_RETCODE_OK );
189208
190209 /* validate that result descriptor created correctly */
191- const dds_topic_descriptor_t * new_desc = ((struct dds_expression_filter * )flt )-> desc ;
192- CU_ASSERT (((struct dds_expression_filter * )flt )-> bin_expr -> nparams == new_desc -> m_nkeys );
210+ const struct dds_cdrstream_desc new_desc = ((struct dds_sertype_default * )(((struct dds_expression_filter * )flt )-> st ))-> type ;
211+ #ifdef DDS_HAS_TYPELIB
212+ CU_ASSERT (((struct dds_expression_filter * )flt )-> bin_expr -> nparams == new_desc .keys .nkeys );
213+ #endif
193214
194215 int token = 0 ;
195216 int token_sz = 0 ;
@@ -199,7 +220,7 @@ CU_Test(ddsc_expr_filter, init_fini)
199220 char * field = ddsrt_strndup ((const char * )(cursor - token_sz + 1U ), (size_t )token_sz - 2U );
200221
201222 bool found = false;
202- for (size_t j = 0 ; j < new_desc -> m_nkeys && !(found = !strcmp (field , new_desc -> m_keys [j ].m_name )); j ++ ) {}
223+ for (size_t j = 0 ; j < new_desc . keys . nkeys && !(found = !strcmp (field , new_desc . keys . keys [j ].name )); j ++ ) {}
203224 CU_ASSERT (found );
204225 ddsrt_free (field );
205226 }
0 commit comments