[libgda] Add bigint test for SQLite provider
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda] Add bigint test for SQLite provider
- Date: Mon, 16 Jul 2018 15:37:15 +0000 (UTC)
commit a1e6c87e840c2fae218c32ae91717fd4019ab6d6
Author: Daniel Espinosa <esodan gmail com>
Date: Mon Jul 16 10:32:56 2018 -0500
Add bigint test for SQLite provider
Fix #13
SQLite provider already uses int64 to get data from
database, so adding patch from Lucas Baudin at
https://bugzilla.gnome.org/attachment.cgi?id=317815
just check that bug has been fixed.
tests/providers/check_sqlite.c | 1 +
tests/providers/prov-test-common.c | 93 ++++++++++++++++++++++++++++++++++++++
tests/providers/prov-test-common.h | 1 +
tests/providers/prov_dbstruct.xml | 5 ++
4 files changed, 100 insertions(+)
---
diff --git a/tests/providers/check_sqlite.c b/tests/providers/check_sqlite.c
index d67345b1e..0310727cb 100644
--- a/tests/providers/check_sqlite.c
+++ b/tests/providers/check_sqlite.c
@@ -46,6 +46,7 @@ main (int argc, char **argv)
if (cnc) {
number_failed += prov_test_common_check_timestamp ();
number_failed += prov_test_common_check_date ();
+ number_failed += prov_test_common_check_bigint ();
number_failed += prov_test_common_check_meta ();
number_failed += prov_test_common_check_meta_identifiers (TRUE, TRUE);
number_failed += prov_test_common_check_meta_identifiers (TRUE, FALSE);
diff --git a/tests/providers/prov-test-common.c b/tests/providers/prov-test-common.c
index cbe4be196..b2b1879bd 100644
--- a/tests/providers/prov-test-common.c
+++ b/tests/providers/prov-test-common.c
@@ -1018,3 +1018,96 @@ out:
return number_failed;
}
+
+int
+prov_test_common_check_bigint (void)
+{
+ GdaSqlParser *parser = NULL;
+ GdaStatement *stmt = NULL;
+ GdaSet *params = NULL;
+ GError *error = NULL;
+ int number_failed = 0;
+ GdaDataModel *model = NULL;
+
+#ifdef CHECK_EXTRA_INFO
+ g_print ("\n============= %s() =============\n", __FUNCTION__);
+#endif
+
+ parser = gda_connection_create_parser (cnc);
+ if (!parser)
+ parser = gda_sql_parser_new ();
+
+ GValue *tso;
+ tso = gda_value_new (G_TYPE_INT64);
+ g_value_set_int64 (tso, 4294967296);
+
+ /* insert date */
+ stmt = gda_sql_parser_parse_string (parser, "INSERT INTO bigint (thebigint) VALUES
(##thebigint::gint64)", NULL, &error);
+ if (!stmt ||
+ ! gda_statement_get_parameters (stmt, ¶ms, &error) ||
+ ! gda_set_set_holder_value (params, &error, "thebigint", g_value_get_int64 (tso)) ||
+ (gda_connection_statement_execute_non_select (cnc, stmt, params, NULL, &error) == -1)) {
+ number_failed ++;
+ goto out;
+ }
+
+ g_print ("Inserted int %s\n", gda_value_stringify (tso));
+
+ /* retreive date */
+ stmt = gda_sql_parser_parse_string (parser, "SELECT thebigint FROM bigint", NULL, &error);
+ if (!stmt) {
+ number_failed ++;
+ goto out;
+ }
+
+ model = gda_connection_statement_execute_select (cnc, stmt, NULL, &error);
+ if (!model) {
+ number_failed ++;
+ goto out;
+ }
+ gda_data_model_dump (model, NULL);
+ if (gda_data_model_get_n_rows (model) != 1) {
+ g_set_error (&error, TEST_ERROR, TEST_ERROR_GENERIC,
+ "Data model should have exactly 1 row");
+ number_failed ++;
+ goto out;
+ }
+
+ const GValue *cvalue;
+ cvalue = gda_data_model_get_typed_value_at (model, 0, 0, G_TYPE_INT64, FALSE, &error);
+ if (!cvalue) {
+ number_failed ++;
+ goto out;
+ }
+ if (g_value_get_int64 (tso) != g_value_get_int64 (cvalue)) {
+ gchar *tmpg, *tmpe;
+ tmpg = gda_value_stringify (cvalue);
+ tmpe = gda_value_stringify (tso);
+ g_set_error (&error, TEST_ERROR, TEST_ERROR_GENERIC,
+ "Retreived date differs from expected: got '%s' and expected '%s'", tmpg, tmpe);
+ g_free (tmpg);
+ g_free (tmpe);
+ number_failed ++;
+ goto out;
+ }
+
+
+out:
+ if (stmt)
+ g_object_unref (stmt);
+ if (params)
+ g_object_unref (params);
+ if (model)
+ g_object_unref (model);
+ g_object_unref (parser);
+
+#ifdef CHECK_EXTRA_INFO
+ g_print ("Date test resulted in %d error(s)\n", number_failed);
+ if (number_failed != 0)
+ g_print ("error: %s\n", error && error->message ? error->message : "No detail");
+ if (error)
+ g_error_free (error);
+#endif
+
+ return number_failed;
+}
diff --git a/tests/providers/prov-test-common.h b/tests/providers/prov-test-common.h
index 64079077f..4dd0db798 100644
--- a/tests/providers/prov-test-common.h
+++ b/tests/providers/prov-test-common.h
@@ -34,5 +34,6 @@ int prov_test_common_check_data_select (void);
int prov_test_common_check_timestamp (void);
int prov_test_common_check_date (void);
int prov_test_common_clean (void);
+int prov_test_common_check_bigint (void);
#endif
diff --git a/tests/providers/prov_dbstruct.xml b/tests/providers/prov_dbstruct.xml
index 0f7e2931f..330e34254 100644
--- a/tests/providers/prov_dbstruct.xml
+++ b/tests/providers/prov_dbstruct.xml
@@ -127,4 +127,9 @@
<column name="thedate" type="date"/>
</table>
+ <!-- testing dates -->
+ <table name="bigint">
+ <column name="thebigint" type="gint64"/>
+ </table>
+
</schema>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]