void load_statement(sqlite3_stmt *stmt, Row_t *row, Table_t *table) { guint32 i, max; if (table->header.list.count <= 0) /* Lazy header loading */ load_table_header(stmt, table); if (!row->fields) /* Lazy memory allocation */ row->fields = calloc(1, sizeof(struct RowFieldSequence)); for (i=0,max=sqlite3_data_count(stmt); i<max ;i++) { struct RowField *rf = calloc(1, sizeof(*rf)); asn_uint32_to_INTEGER(&(rf->pos), i); rf->value.present = RowFieldValue_PR_n; switch (sqlite3_column_type(stmt, i)) { case SQLITE_NULL: rf->value.present = RowFieldValue_PR_n; break; case SQLITE_INTEGER: do { gint64 i64 = sqlite3_column_int64(stmt, i); asn_int64_to_INTEGER(&(rf->value.choice.i), i64); rf->value.present = RowFieldValue_PR_i; } while (0); break; case SQLITE_FLOAT: do { gdouble d = sqlite3_column_double(stmt, i); asn_double2REAL(&(rf->value.choice.f), d); rf->value.present = RowFieldValue_PR_f; } while (0); break; case SQLITE_TEXT: do { const guint8 *t = sqlite3_column_text(stmt, i); gsize tsize = sqlite3_column_bytes(stmt, i); OCTET_STRING_fromBuf(&(rf->value.choice.s), (char*)t, tsize); rf->value.present = RowFieldValue_PR_s; } while (0); break; case SQLITE_BLOB: do { const void *b = sqlite3_column_blob(stmt, i); gsize bsize = sqlite3_column_bytes(stmt, i); OCTET_STRING_fromBuf(&(rf->value.choice.b), (char*)b, bsize); rf->value.present = RowFieldValue_PR_b; } while (0); break; default: rf->value.present = RowFieldValue_PR_n; break; } asn_sequence_add(&(row->fields->list), rf); } }
GByteArray* version_encode(GTree *t) { asn_enc_rval_t rv; GByteArray *encoded; struct BaseVersion bv; gboolean runner(gpointer _k, gpointer _v, gpointer _u) { (void) _u; if (_k && _v && hashstr_len(_k) > 0) { struct object_version_s *v = _v; struct TableVersion *tv = g_malloc0(sizeof(*tv)); OCTET_STRING_fromBuf(&(tv->name), hashstr_str(_k), hashstr_len(_k)); asn_int64_to_INTEGER(&(tv->version), v->version); asn_int64_to_INTEGER(&(tv->when), v->when); asn_sequence_add(&(bv.list), tv); } return FALSE; }