Re: [gnome-db] [GDA] Mysql and LONGTEXT



Hi!

I haven't looked into the MySQL provider for some time, but it should work as far as I can tell. Can you send me the Events table schema?

Regards,

Vivien

2015-10-22 14:35 GMT+02:00 Adrien Schwartzentruber <adrien schwartzentruber gmail com>:
Hello guys,

I tried to add a longtext value in a mysql database using gda but I have a SIGPIPE error when I execute the statement. 

THis is the stack : 

(gdb) bt
#0  0x00007ffff6ec12af in send () from /usr/lib/libc.so.6
#1  0x00007fffee217a4d in ?? () from /usr/lib/libmysqlclient.so.18
#2  0x00007fffee1f6349 in ?? () from /usr/lib/libmysqlclient.so.18
#3  0x00007fffee1f6623 in ?? () from /usr/lib/libmysqlclient.so.18
#4  0x00007fffee1f6d2a in ?? () from /usr/lib/libmysqlclient.so.18
#5  0x00007fffee1edee4 in mysql_set_character_set () from /usr/lib/libmysqlclient.so.18
#6  0x00007fffee1e5266 in mysql_stmt_param_metadata () from /usr/lib/libmysqlclient.so.18
#7  0x00007fffee1e753a in mysql_stmt_execute () from /usr/lib/libmysqlclient.so.18
#8  0x00007fffee73079a in gda_mysql_provider_statement_execute (provider=<optimized out>, cnc=0x777220, stmt=<optimized out>, params=<optimized out>, 
    model_usage=<optimized out>, col_types=<optimized out>, last_inserted_row=0x7fffffffead0, task_id=0x0, async_cb=0x0, cb_data=0x0, error=0x7fffffffeae0)
    at gda-mysql-provider.c:2782
#9  0x00007ffff65c00c1 in gda_connection_statement_execute_v (cnc=cnc entry=0x777220, stmt=stmt entry=0x699680, params=params entry=0x62b0c0, 
    model_usage=model_usage entry=GDA_STATEMENT_MODEL_RANDOM_ACCESS, last_inserted_row=last_inserted_row entry=0x7fffffffead0, error=error entry=0x7fffffffeae0)
    at gda-connection.c:3544
#10 0x00007ffff65c03b4 in gda_connection_statement_execute (cnc=0x777220, stmt=0x699680, params=0x62b0c0, model_usage=GDA_STATEMENT_MODEL_RANDOM_ACCESS, 
    last_inserted_row=0x7fffffffead0, error=0x7fffffffeae0) at gda-connection.c:3725
#11 0x00007ffff78c5a85 in ast_db_event_new_entry_full () from /usr/lib/libAST_DBLayer.so
#12 0x00007ffff78c5da3 in ast_db_event_information_new_entry_with_meta_and_hidden () from /usr/lib/libAST_DBLayer.so
#13 0x0000000000400b0a in main ()


This is the insertion method : 
GValue*
ast_db_event_new_entry_full(GdaConnection* dbConnection, gdouble time, const gchar* meta, const gchar* type, const gchar* subType, const gchar* state, gint sourceID, const gchar* username, gboolean hidden) {
GValue* result = NULL;

GValue* timeValue = gda_value_new(G_TYPE_DOUBLE);
g_value_set_double(timeValue, time);

GValue* metaValue = NULL;
if (meta != NULL)
metaValue = gda_value_new_from_string(meta, G_TYPE_STRING);

GValue* subTypeIDValue = ast_db_event_sub_types_get_or_register(dbConnection, subType, type);
if (subTypeIDValue != NULL) {
GValue* typeIDValue = ast_db_event_types_get_or_register(dbConnection, type);
if (typeIDValue != NULL) {
GValue* stateID = NULL;
if (state != NULL) {
stateID = ast_db_event_state_get_id(dbConnection, state);
} else {
stateID = gda_value_new_null();
}

if (stateID != NULL) {
GValue* sourceIDValue = gda_value_new(G_TYPE_INT);
g_value_set_int(sourceIDValue, sourceID);

GValue* userIDValue = NULL;
if (username != NULL) {
userIDValue = gda_value_new_from_string(username, G_TYPE_STRING);
} else {
userIDValue = gda_value_new_null();
}
GValue* isHiddenValue= NULL;
isHiddenValue = gda_value_new(G_TYPE_INT);
g_value_set_int(isHiddenValue, hidden ? 1 : 0);

GdaStatement *stmt = NULL;
GdaSet * set = NULL;
GdaSet * lastRow = NULL;
GdaHolder *p = NULL;
GError * err = NULL;
GObject * res = NULL;

stmt = ast_db_common_get_statement(dbConnection, "INSERT INTO Events (time, meta, fk_EventTypes, fk_EventSubTypes, fk_EventState, fk_Sources, username, isHidden) VALUES ( ##the_time::gdouble , ##the_meta::string::null , ##the_type::gint , ##the_subtype::gint, ##the_state::gint::null, ##the_sourceID::gint, ##the_user::string::null, ##is_hidden::gint::null )");
if (stmt != NULL) {
gda_statement_get_parameters (stmt, &set, NULL);

p = gda_set_get_holder (set, "the_time");
gda_holder_set_value (p, timeValue, NULL);

if (metaValue) {
p = gda_set_get_holder (set, "the_meta");
gda_holder_set_value (p, metaValue, NULL);
}

p = gda_set_get_holder (set, "the_type");
gda_holder_set_value (p, typeIDValue, NULL);

p = gda_set_get_holder (set, "the_subtype");
gda_holder_set_value (p, subTypeIDValue, NULL);

p = gda_set_get_holder (set, "the_state");
gda_holder_set_value (p, stateID, NULL);

p = gda_set_get_holder (set, "the_sourceID");
gda_holder_set_value (p, sourceIDValue, NULL);

p = gda_set_get_holder (set, "the_user");
gda_holder_set_value (p, userIDValue, NULL);

p = gda_set_get_holder (set, "is_hidden");
gda_holder_set_value (p, isHiddenValue, NULL);

res = gda_connection_statement_execute(dbConnection,stmt, set,GDA_STATEMENT_MODEL_RANDOM_ACCESS, &lastRow, &err);
if ((res != NULL) && (err == NULL)) {
GdaHolder *h = GDA_HOLDER(lastRow->holders->data);
const GValue* holderValue = gda_holder_get_value(h);

result = gda_value_new(G_TYPE_INT);
g_value_set_int(result, g_value_get_int(holderValue));

//Segmentation fault
//g_object_unref(holderValue);
g_object_unref(lastRow);
g_object_unref(res);
} else {
g_error ("Could not INSERT data into the 'Events' table: %s\n",
ast_error_get_error_message(err));
}

if (err != NULL)
g_error_free(err);


g_object_unref(set);
g_object_unref(stmt);
}

gda_value_free(sourceIDValue);
gda_value_free(userIDValue);
gda_value_free(stateID);
} else {
g_critical("ast:db:Failed to get the event state. State: %s. SubType: %s. Type: %s.", type, subType, state);
}
gda_value_free(typeIDValue);
} else {
g_critical("Ast:DB: Failed to get the type ID. Type: %s", type);
}
gda_value_free(subTypeIDValue);
} else {
g_critical("Ast:DB:Failed to get the subType ID. SubType: %s. Type: %s.", subType, type);
}

gda_value_free(timeValue);
if (metaValue)
gda_value_free(metaValue);
return result;
}

This is a test application : 

gint strSize = 10;
while (TRUE) {
GdaConnection* connection = ast_db_get_connection();
gchar* meta = NULL;
meta = g_new0(gchar, strSize+1);
ast_str_rand_string(meta, strSize);
g_message("Before Insert %d", strSize);
ast_db_event_information_new_entry_with_meta_and_hidden(connection, "AstInformationEvent","Ast_SystemReport", 1, meta);
g_free(meta);
ast_db_release(connection);
g_message("Insert %d", strSize);
strSize = strSize * 2;
g_usleep(10000);
}


*It stop when size if greater than 655360


How can I use longtext using gda ? 

Thx in advance for your help. 

_______________________________________________
gnome-db-list mailing list
gnome-db-list gnome org
https://mail.gnome.org/mailman/listinfo/gnome-db-list




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]