@@ -221,7 +221,8 @@ TEST_F(Types, basic)
221
221
" c1 DECIMAL(4,2),"
222
222
" c2 FLOAT,"
223
223
" c3 DOUBLE,"
224
- " c4 VARCHAR(32)"
224
+ " c4 VARCHAR(32),"
225
+ " c5 BIT(64)"
225
226
" )" );
226
227
227
228
Table types = getSchema (" test" ).getTable (" types" );
@@ -231,14 +232,15 @@ TEST_F(Types, basic)
231
232
float data_float[] = { 3 .1415F , -2 .7182F };
232
233
double data_double[] = { 3.141592 , -2.718281 };
233
234
string data_string[] = { " First row" , " Second row" };
235
+ uint64_t data_bit[] = {0xFEDCBA9876543210 ,0x0123456789ABCDEF };
234
236
235
237
Row row (data_int[0 ], data_decimal[0 ], data_float[0 ], data_double[0 ],
236
- data_string[0 ]);
238
+ data_string[0 ], data_bit[ 0 ] );
237
239
238
240
types.insert ()
239
241
.values (row)
240
242
.values (data_int[1 ], data_decimal[1 ], data_float[1 ], data_double[1 ],
241
- data_string[1 ])
243
+ data_string[1 ], data_bit[ 1 ] )
242
244
.execute ();
243
245
244
246
cout << " Table prepared, querying it..." << endl;
@@ -279,6 +281,13 @@ TEST_F(Types, basic)
279
281
<< c4.getLength ();
280
282
cout << " , collation: " << c4.getCollationName () << endl;
281
283
284
+ const Column &c5 = res.getColumn (5 );
285
+ EXPECT_EQ (string (" c5" ), c5.getColumnName ());
286
+ EXPECT_EQ (Type::BIT, c5.getType ());
287
+ cout << " column " << res.getColumn (5 ) << " length: "
288
+ << c5.getLength ();
289
+ EXPECT_EQ (64 , c5.getLength ());
290
+
282
291
for (unsigned i = 0 ; (row = res.fetchOne ()); ++i)
283
292
{
284
293
cout << " == next row ==" << endl;
@@ -294,15 +303,50 @@ TEST_F(Types, basic)
294
303
EXPECT_EQ (Value::FLOAT, row[2 ].getType ());
295
304
EXPECT_EQ (Value::DOUBLE, row[3 ].getType ());
296
305
EXPECT_EQ (Value::STRING, row[4 ].getType ());
306
+ EXPECT_EQ (Value::UINT64, row[5 ].getType ());
297
307
298
308
EXPECT_EQ (data_int[i], (int )row[0 ]);
299
309
EXPECT_EQ (data_decimal[i], (double )row[1 ]);
300
310
EXPECT_EQ (data_float[i], (float )row[2 ]);
301
311
EXPECT_EQ (data_double[i], (double )row[3 ]);
302
312
EXPECT_EQ (data_string[i], (string)row[4 ]);
313
+ EXPECT_EQ (data_bit[i], (uint64_t )row[5 ]);
303
314
304
315
EXPECT_GT (row[1 ].getRawBytes ().size (), 1 );
305
316
EXPECT_EQ (data_string[i].length (), string (row[4 ]).length ());
317
+
318
+ }
319
+
320
+ cout << " Testing null value" << endl;
321
+
322
+ types.update ()
323
+ .set (" c0" , nullvalue)
324
+ .set (" c1" , nullvalue)
325
+ .set (" c2" , nullvalue)
326
+ .set (" c3" , nullvalue)
327
+ .set (" c4" , nullvalue)
328
+ .set (" c5" , nullvalue)
329
+ .where (" c0 = 7" )
330
+ .execute ();
331
+
332
+ types.update ()
333
+ .set (" c0" , nullptr )
334
+ .set (" c1" , nullptr )
335
+ .set (" c2" , nullptr )
336
+ .set (" c3" , nullptr )
337
+ .set (" c4" , nullptr )
338
+ .set (" c5" , nullptr )
339
+ .where (" c0 = -7" )
340
+ .execute ();
341
+
342
+ res = types.select ().execute ();
343
+ for (auto row : res)
344
+ {
345
+ EXPECT_TRUE (row);
346
+ for (unsigned i=0 ; i <res.getColumnCount (); ++i)
347
+ {
348
+ EXPECT_TRUE (row[i].isNull ());
349
+ }
306
350
}
307
351
308
352
cout << " Testing Boolean value" << endl;
@@ -320,16 +364,6 @@ TEST_F(Types, basic)
320
364
cout << " value: " << row[0 ] << endl;
321
365
EXPECT_FALSE ((bool )row[0 ]);
322
366
323
- cout << " Testing null value" << endl;
324
-
325
- types.update ().set (" c0" , nullvalue).set (" c1" , nullptr ).execute ();
326
- res = types.select (" c0" ," c1" ).execute ();
327
- row = res.fetchOne ();
328
-
329
- EXPECT_TRUE (row);
330
- EXPECT_TRUE (row[0 ].isNull ());
331
- EXPECT_TRUE (row[1 ].isNull ());
332
-
333
367
cout << " Done!" << endl;
334
368
}
335
369
@@ -596,6 +630,99 @@ TEST_F(Types, blob)
596
630
cout << " Data matches!" << endl;
597
631
}
598
632
633
+ TEST_F (Types, bit)
634
+ {
635
+ SKIP_IF_NO_XPLUGIN;
636
+
637
+ cout << " Preparing test.types..." << endl;
638
+
639
+ sql (" DROP TABLE IF EXISTS test.types" );
640
+ sql (
641
+ " CREATE TABLE test.types("
642
+ " c64 BIT(64),"
643
+ " c32 BIT(32),"
644
+ " c16 BIT(16),"
645
+ " c8 BIT( 8),"
646
+ " c1 BIT( 1)"
647
+ " )"
648
+ );
649
+
650
+ Table types = getSchema (" test" ).getTable (" types" );
651
+
652
+
653
+ uint64_t data64 = std::numeric_limits<uint64_t >::max ();
654
+ uint32_t data32 = std::numeric_limits<uint32_t >::max ();
655
+ uint16_t data16 = std::numeric_limits<uint16_t >::max ();
656
+ uint8_t data8 = std::numeric_limits<uint8_t >::max ();
657
+ uint8_t data1 = 1 ;
658
+
659
+ types.insert ().values (data64, data32, data16, data8, data1)
660
+ .values (nullptr , nullptr , nullptr ,nullptr ,nullptr ).execute ();
661
+
662
+ cout << " Table prepared, querying it..." << endl;
663
+
664
+ RowResult res = types.select ().execute ();
665
+
666
+ auto column_type = [&res](int idx)
667
+ {
668
+ const Column &c = res.getColumn (idx);
669
+ EXPECT_EQ (Type::BIT, c.getType ());
670
+ };
671
+
672
+ column_type (0 );
673
+ column_type (1 );
674
+ column_type (2 );
675
+ column_type (3 );
676
+ column_type (4 );
677
+
678
+ Row row = res.fetchOne ();
679
+
680
+ cout << " Got a row, checking data..." << endl;
681
+
682
+
683
+ Value v64 = row[0 ];
684
+ Value v32 = row[1 ];
685
+ Value v16 = row[2 ];
686
+ Value v8 = row[3 ];
687
+ Value v1 = row[4 ];
688
+
689
+ EXPECT_EQ (Value::UINT64, v64.getType ());
690
+ EXPECT_EQ (Value::UINT64, v32.getType ());
691
+ EXPECT_EQ (Value::UINT64, v16.getType ());
692
+ EXPECT_EQ (Value::UINT64, v8 .getType ());
693
+ EXPECT_EQ (Value::UINT64, v1 .getType ());
694
+
695
+
696
+ EXPECT_EQ (v64.get <uint64_t >(), data64);
697
+ EXPECT_EQ (v32.get <uint64_t >(), data32);
698
+ EXPECT_EQ (v16.get <uint64_t >(), data16);
699
+ EXPECT_EQ (v8 .get <uint64_t >(), data8 );
700
+ EXPECT_EQ (v1 .get <uint64_t >(), data1 );
701
+
702
+ EXPECT_EQ (v64.get <uint64_t >(), data64);
703
+ EXPECT_EQ (v32.get <uint64_t >(), data32);
704
+ EXPECT_EQ (v16.get <uint64_t >(), data16);
705
+ EXPECT_EQ (v8 .get <uint64_t >(), data8 );
706
+ EXPECT_EQ (v1 .get <uint64_t >(), data1 );
707
+
708
+ // second row
709
+ row = res.fetchOne ();
710
+
711
+ v64 = row[0 ];
712
+ v32 = row[1 ];
713
+ v16 = row[2 ];
714
+ v8 = row[3 ];
715
+ v1 = row[4 ];
716
+
717
+ EXPECT_EQ (Value::VNULL, v64.getType ());
718
+ EXPECT_EQ (Value::VNULL, v32.getType ());
719
+ EXPECT_EQ (Value::VNULL, v16.getType ());
720
+ EXPECT_EQ (Value::VNULL, v8 .getType ());
721
+ EXPECT_EQ (Value::VNULL, v1 .getType ());
722
+
723
+ cout << " Data matches!" << endl;
724
+ }
725
+
599
726
600
727
TEST_F (Types, json)
601
728
{
0 commit comments