Changeset: 7b2dc7c74ab8 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7b2dc7c74ab8 Modified Files: tools/monetdbe/monetdbe.c Branch: default Log Message:
monetdbe_append removed constraint of 16 rows diffs (188 lines): diff --git a/tools/monetdbe/monetdbe.c b/tools/monetdbe/monetdbe.c --- a/tools/monetdbe/monetdbe.c +++ b/tools/monetdbe/monetdbe.c @@ -1079,107 +1079,101 @@ monetdbe_append(monetdbe_database dbhdl, goto cleanup; } - /* small number of rows */ - if (input[0]->count <= 16) { - size_t i, cnt = input[0]->count; - node *n; + size_t i, cnt = input[0]->count; + node *n; + + for (i = 0, n = t->columns.set->h; i < column_count && n; i++, n = n->next) { + sql_column *c = n->data; + int mtype = monetdbe_type(input[i]->type); + const void* nil = (mtype>=0)?ATOMnilptr(mtype):NULL; + char *v = input[i]->data; + int w = 1; - for (i = 0, n = t->columns.set->h; i < column_count && n; i++, n = n->next) { - sql_column *c = n->data; - int mtype = monetdbe_type(input[i]->type); - const void* nil = (mtype>=0)?ATOMnilptr(mtype):NULL; - char *v = input[i]->data; - int w = 1; - - if (mtype < 0) { - mdbe->msg = createException(SQL, "monetdbe.monetdbe_append", "Cannot find type for column %zu", i); - goto cleanup; + if (mtype < 0) { + mdbe->msg = createException(SQL, "monetdbe.monetdbe_append", "Cannot find type for column %zu", i); + goto cleanup; + } + if ((mtype >= TYPE_bit && mtype <= TYPE_lng)) { + w = ATOMsize(mtype); + for (size_t j=0; j<cnt; j++, v+=w){ + if (store_funcs.append_col(m->session->tr, c, v, mtype) != 0) { + mdbe->msg = createException(SQL, "monetdbe.monetdbe_append", "Cannot append values"); + goto cleanup; + } } - if ((mtype >= TYPE_bit && mtype <= TYPE_lng)) { - w = ATOMsize(mtype); - for (size_t j=0; j<cnt; j++, v+=w){ - if (store_funcs.append_col(m->session->tr, c, v, mtype) != 0) { - mdbe->msg = createException(SQL, "monetdbe.monetdbe_append", "Cannot append values"); - goto cleanup; - } - } - } else if (mtype == TYPE_str) { - char **d = (char**)v; + } else if (mtype == TYPE_str) { + char **d = (char**)v; + + for (size_t j=0; j<cnt; j++){ + char *s = d[j]; + if (!s) + s = (char*) nil; - for (size_t j=0; j<cnt; j++){ - char *s = d[j]; - if (!s) - s = (char*) nil; + if (store_funcs.append_col(m->session->tr, c, s, mtype) != 0) { + mdbe->msg = createException(SQL, "monetdbe.monetdbe_append", "Cannot append values"); + goto cleanup; + } + } + } else if (mtype == TYPE_timestamp) { + monetdbe_data_timestamp* ts = (monetdbe_data_timestamp*)v; - if (store_funcs.append_col(m->session->tr, c, s, mtype) != 0) { - mdbe->msg = createException(SQL, "monetdbe.monetdbe_append", "Cannot append values"); - goto cleanup; - } - } - } else if (mtype == TYPE_timestamp) { - monetdbe_data_timestamp* ts = (monetdbe_data_timestamp*)v; - - for (size_t j=0; j<cnt; j++){ - timestamp t = *(timestamp*) nil; - if(!timestamp_is_null(ts[j])) - t = timestamp_from_data(&ts[j]); + for (size_t j=0; j<cnt; j++){ + timestamp t = *(timestamp*) nil; + if(!timestamp_is_null(ts[j])) + t = timestamp_from_data(&ts[j]); - if (store_funcs.append_col(m->session->tr, c, &t, mtype) != 0) { - mdbe->msg = createException(SQL, "monetdbe.monetdbe_append", "Cannot append values"); - goto cleanup; - } + if (store_funcs.append_col(m->session->tr, c, &t, mtype) != 0) { + mdbe->msg = createException(SQL, "monetdbe.monetdbe_append", "Cannot append values"); + goto cleanup; } - } else if (mtype == TYPE_date) { - monetdbe_data_date* de = (monetdbe_data_date*)v; + } + } else if (mtype == TYPE_date) { + monetdbe_data_date* de = (monetdbe_data_date*)v; - for (size_t j=0; j<cnt; j++){ - date d = *(date*) nil; - if(!date_is_null(de[j])) - d = date_from_data(&de[j]); + for (size_t j=0; j<cnt; j++){ + date d = *(date*) nil; + if(!date_is_null(de[j])) + d = date_from_data(&de[j]); - if (store_funcs.append_col(m->session->tr, c, &d, mtype) != 0) { - mdbe->msg = createException(SQL, "monetdbe.monetdbe_append", "Cannot append values"); - goto cleanup; - } + if (store_funcs.append_col(m->session->tr, c, &d, mtype) != 0) { + mdbe->msg = createException(SQL, "monetdbe.monetdbe_append", "Cannot append values"); + goto cleanup; } - } else if (mtype == TYPE_daytime) { - monetdbe_data_time* t = (monetdbe_data_time*)v; + } + } else if (mtype == TYPE_daytime) { + monetdbe_data_time* t = (monetdbe_data_time*)v; - for (size_t j=0; j<cnt; j++){ - daytime dt = *(daytime*) nil; - if(!time_is_null(t[j])) - dt = time_from_data(&t[j]); + for (size_t j=0; j<cnt; j++){ + daytime dt = *(daytime*) nil; + if(!time_is_null(t[j])) + dt = time_from_data(&t[j]); - if (store_funcs.append_col(m->session->tr, c, &dt, mtype) != 0) { - mdbe->msg = createException(SQL, "monetdbe.monetdbe_append", "Cannot append values"); - goto cleanup; - } + if (store_funcs.append_col(m->session->tr, c, &dt, mtype) != 0) { + mdbe->msg = createException(SQL, "monetdbe.monetdbe_append", "Cannot append values"); + goto cleanup; } - } else if (mtype == TYPE_blob) { - monetdbe_data_blob* be = (monetdbe_data_blob*)v; + } + } else if (mtype == TYPE_blob) { + monetdbe_data_blob* be = (monetdbe_data_blob*)v; - for (size_t j=0; j<cnt; j++){ - blob* b = (blob*) nil; - if (!blob_is_null(be[j])) { - size_t len = be[j].size; - b = (blob*) GDKmalloc(blobsize(len)); - if (b == NULL) - mdbe->msg = createException(MAL, "monetdbe.monetdbe_append", MAL_MALLOC_FAIL); + for (size_t j=0; j<cnt; j++){ + blob* b = (blob*) nil; + if (!blob_is_null(be[j])) { + size_t len = be[j].size; + b = (blob*) GDKmalloc(blobsize(len)); + if (b == NULL) + mdbe->msg = createException(MAL, "monetdbe.monetdbe_append", MAL_MALLOC_FAIL); - b->nitems = len; - memcpy(b->data, be[j].data, len); - } + b->nitems = len; + memcpy(b->data, be[j].data, len); + } - if (store_funcs.append_col(m->session->tr, c, b, mtype) != 0) { - mdbe->msg = createException(SQL, "monetdbe.monetdbe_append", "Cannot append values"); - goto cleanup; - } + if (store_funcs.append_col(m->session->tr, c, b, mtype) != 0) { + mdbe->msg = createException(SQL, "monetdbe.monetdbe_append", "Cannot append values"); + goto cleanup; } } } - } else { - mdbe->msg = createException(SQL, "monetdbe.monetdbe_append", "TODO bulk insert"); - goto cleanup; } cleanup: mdbe->msg = commit_action(m, mdbe, NULL, NULL); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list