mirror of
https://github.com/mdbtools/mdbtools.git
synced 2025-09-18 18:22:07 +08:00
broken pipe on commit, see previous log
This commit is contained in:
@@ -560,7 +560,7 @@ void mdb_sql_listtables(MdbSQL *sql)
|
|||||||
MdbTableDef *ttable;
|
MdbTableDef *ttable;
|
||||||
MdbColumn tcol;
|
MdbColumn tcol;
|
||||||
MdbSQLColumn *sqlcol;
|
MdbSQLColumn *sqlcol;
|
||||||
gchar *tmpstr;
|
gchar tmpstr[100];
|
||||||
int tmpsiz;
|
int tmpsiz;
|
||||||
|
|
||||||
if (!mdb) {
|
if (!mdb) {
|
||||||
@@ -593,8 +593,7 @@ void mdb_sql_listtables(MdbSQL *sql)
|
|||||||
if (entry->object_type == MDB_TABLE) {
|
if (entry->object_type == MDB_TABLE) {
|
||||||
if (strncmp (entry->object_name, "MSys", 4)) {
|
if (strncmp (entry->object_name, "MSys", 4)) {
|
||||||
//col = g_ptr_array_index(table->columns,0);
|
//col = g_ptr_array_index(table->columns,0);
|
||||||
tmpstr = convert_to_ucs2(mdb, entry->object_name);
|
tmpsiz = mdb_ascii2unicode(mdb, entry->object_name, 0, 100, tmpstr);
|
||||||
tmpsiz = IS_JET4(mdb) ? strlen(entry->object_name)*2 : strlen(entry->object_name);
|
|
||||||
fields[0].value = tmpstr;
|
fields[0].value = tmpstr;
|
||||||
fields[0].siz = tmpsiz;
|
fields[0].siz = tmpsiz;
|
||||||
fields[0].is_fixed = 0;
|
fields[0].is_fixed = 0;
|
||||||
@@ -605,7 +604,6 @@ void mdb_sql_listtables(MdbSQL *sql)
|
|||||||
row_size = mdb_pack_row(ttable, row_buffer, 1, fields);
|
row_size = mdb_pack_row(ttable, row_buffer, 1, fields);
|
||||||
mdb_add_row_to_pg(ttable,row_buffer, row_size);
|
mdb_add_row_to_pg(ttable,row_buffer, row_size);
|
||||||
ttable->num_rows++;
|
ttable->num_rows++;
|
||||||
g_free(tmpstr);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -627,7 +625,7 @@ void mdb_sql_describe_table(MdbSQL *sql)
|
|||||||
unsigned char row_buffer[4096];
|
unsigned char row_buffer[4096];
|
||||||
unsigned char *new_pg;
|
unsigned char *new_pg;
|
||||||
int row_size;
|
int row_size;
|
||||||
gchar *col_name, *col_type, *col_size;
|
gchar col_name[100], col_type[100], col_size[100];
|
||||||
int tmpsiz;
|
int tmpsiz;
|
||||||
|
|
||||||
if (!mdb) {
|
if (!mdb) {
|
||||||
@@ -696,8 +694,7 @@ void mdb_sql_describe_table(MdbSQL *sql)
|
|||||||
for (i=0;i<table->num_cols;i++) {
|
for (i=0;i<table->num_cols;i++) {
|
||||||
|
|
||||||
col = g_ptr_array_index(table->columns,i);
|
col = g_ptr_array_index(table->columns,i);
|
||||||
col_name = convert_to_ucs2(mdb, col->name);
|
tmpsiz = mdb_ascii2unicode(mdb, col->name, 0, 100, col_name);
|
||||||
tmpsiz = IS_JET4(mdb) ? strlen(col->name)*2 : strlen(col->name);
|
|
||||||
fields[0].value = col_name;
|
fields[0].value = col_name;
|
||||||
fields[0].siz = tmpsiz;
|
fields[0].siz = tmpsiz;
|
||||||
fields[0].is_fixed = 0;
|
fields[0].is_fixed = 0;
|
||||||
@@ -706,8 +703,7 @@ void mdb_sql_describe_table(MdbSQL *sql)
|
|||||||
fields[0].colnum = 0;
|
fields[0].colnum = 0;
|
||||||
|
|
||||||
strcpy(tmpstr, mdb_get_coltype_string(mdb->default_backend, col->col_type));
|
strcpy(tmpstr, mdb_get_coltype_string(mdb->default_backend, col->col_type));
|
||||||
col_type = convert_to_ucs2(mdb, tmpstr);
|
tmpsiz = mdb_ascii2unicode(mdb, tmpstr, 0, 100, col_type);
|
||||||
tmpsiz = IS_JET4(mdb) ? strlen(tmpstr)*2 : strlen(tmpstr);
|
|
||||||
fields[1].value = col_type;
|
fields[1].value = col_type;
|
||||||
fields[1].siz = tmpsiz;
|
fields[1].siz = tmpsiz;
|
||||||
fields[1].is_fixed = 0;
|
fields[1].is_fixed = 0;
|
||||||
@@ -716,8 +712,7 @@ void mdb_sql_describe_table(MdbSQL *sql)
|
|||||||
fields[1].colnum = 1;
|
fields[1].colnum = 1;
|
||||||
|
|
||||||
sprintf(tmpstr,"%d",col->col_size);
|
sprintf(tmpstr,"%d",col->col_size);
|
||||||
col_size = convert_to_ucs2(mdb, tmpstr);
|
tmpsiz = mdb_ascii2unicode(mdb, tmpstr, 0, 100, col_size);
|
||||||
tmpsiz = IS_JET4(mdb) ? strlen(tmpstr)*2 : strlen(tmpstr);
|
|
||||||
fields[2].value = col_size;
|
fields[2].value = col_size;
|
||||||
fields[2].siz = tmpsiz;
|
fields[2].siz = tmpsiz;
|
||||||
fields[2].is_fixed = 0;
|
fields[2].is_fixed = 0;
|
||||||
@@ -727,9 +722,6 @@ void mdb_sql_describe_table(MdbSQL *sql)
|
|||||||
|
|
||||||
row_size = mdb_pack_row(ttable, row_buffer, 3, fields);
|
row_size = mdb_pack_row(ttable, row_buffer, 3, fields);
|
||||||
mdb_add_row_to_pg(ttable,row_buffer, row_size);
|
mdb_add_row_to_pg(ttable,row_buffer, row_size);
|
||||||
g_free(col_name);
|
|
||||||
g_free(col_type);
|
|
||||||
g_free(col_size);
|
|
||||||
ttable->num_rows++;
|
ttable->num_rows++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -891,6 +883,31 @@ int i;
|
|||||||
mdb_sql_bind_column(sql, i+1, sql->bound_values[i]);
|
mdb_sql_bind_column(sql, i+1, sql->bound_values[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* mdb_sql_fetch_row should be called instead of mdb_fetch_row when there may be
|
||||||
|
* work tables involved (currently implemented as kludge_ttable_pg)
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
mdb_sql_fetch_row(MdbSQL *sql, MdbTableDef *table)
|
||||||
|
{
|
||||||
|
MdbHandle *mdb = table->entry->mdb;
|
||||||
|
MdbFormatConstants *fmt = mdb->fmt;
|
||||||
|
unsigned int rows;
|
||||||
|
|
||||||
|
if (sql->kludge_ttable_pg) {
|
||||||
|
memcpy(mdb->pg_buf, sql->kludge_ttable_pg, fmt->pg_size);
|
||||||
|
|
||||||
|
rows = mdb_pg_get_int16(mdb,fmt->row_count_offset);
|
||||||
|
if (rows > table->cur_row) {
|
||||||
|
mdb_read_row(sql->cur_table, table->cur_row++);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
return mdb_fetch_row(table);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
mdb_sql_dump_results(MdbSQL *sql)
|
mdb_sql_dump_results(MdbSQL *sql)
|
||||||
{
|
{
|
||||||
|
@@ -237,21 +237,6 @@ dump_results(MdbSQL *sql)
|
|||||||
fprintf(stdout, "%s", sqlcol->name);
|
fprintf(stdout, "%s", sqlcol->name);
|
||||||
fprintf(stdout,"\n");
|
fprintf(stdout,"\n");
|
||||||
}
|
}
|
||||||
if (sql->kludge_ttable_pg) {
|
|
||||||
memcpy(mdb->pg_buf, sql->kludge_ttable_pg, fmt->pg_size);
|
|
||||||
rows = mdb_pg_get_int16(mdb,fmt->row_count_offset);
|
|
||||||
for (i = 0; i < rows; i++) {
|
|
||||||
rc = mdb_read_row(sql->cur_table, i);
|
|
||||||
row_count++;
|
|
||||||
for (j=0;j<sql->num_columns-1;j++) {
|
|
||||||
sqlcol = g_ptr_array_index(sql->columns,j);
|
|
||||||
fprintf(stdout, "%s%s", sql->bound_values[j], delimiter);
|
|
||||||
}
|
|
||||||
sqlcol = g_ptr_array_index(sql->columns,sql->num_columns-1);
|
|
||||||
fprintf(stdout, "%s", sql->bound_values[sql->num_columns-1]);
|
|
||||||
fprintf(stdout,"\n");
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
while(mdb_fetch_row(sql->cur_table)) {
|
while(mdb_fetch_row(sql->cur_table)) {
|
||||||
row_count++;
|
row_count++;
|
||||||
for (j=0;j<sql->num_columns-1;j++) {
|
for (j=0;j<sql->num_columns-1;j++) {
|
||||||
@@ -262,7 +247,6 @@ dump_results(MdbSQL *sql)
|
|||||||
fprintf(stdout, "%s", sql->bound_values[sql->num_columns-1]);
|
fprintf(stdout, "%s", sql->bound_values[sql->num_columns-1]);
|
||||||
fprintf(stdout,"\n");
|
fprintf(stdout,"\n");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (footers) {
|
if (footers) {
|
||||||
if (!row_count)
|
if (!row_count)
|
||||||
fprintf(stdout, "No Rows retrieved\n");
|
fprintf(stdout, "No Rows retrieved\n");
|
||||||
@@ -307,6 +291,7 @@ dump_results_pp(MdbSQL *sql)
|
|||||||
fprintf(stdout,"\n");
|
fprintf(stdout,"\n");
|
||||||
|
|
||||||
/* print each row */
|
/* print each row */
|
||||||
|
/*
|
||||||
if (sql->kludge_ttable_pg) {
|
if (sql->kludge_ttable_pg) {
|
||||||
memcpy(mdb->pg_buf, sql->kludge_ttable_pg, fmt->pg_size);
|
memcpy(mdb->pg_buf, sql->kludge_ttable_pg, fmt->pg_size);
|
||||||
rows = mdb_pg_get_int16(mdb,fmt->row_count_offset);
|
rows = mdb_pg_get_int16(mdb,fmt->row_count_offset);
|
||||||
@@ -319,8 +304,8 @@ dump_results_pp(MdbSQL *sql)
|
|||||||
}
|
}
|
||||||
fprintf(stdout,"\n");
|
fprintf(stdout,"\n");
|
||||||
}
|
}
|
||||||
} else {
|
*/
|
||||||
while(mdb_fetch_row(sql->cur_table)) {
|
while(mdb_sql_fetch_row(sql, sql->cur_table)) {
|
||||||
row_count++;
|
row_count++;
|
||||||
for (j=0;j<sql->num_columns;j++) {
|
for (j=0;j<sql->num_columns;j++) {
|
||||||
sqlcol = g_ptr_array_index(sql->columns,j);
|
sqlcol = g_ptr_array_index(sql->columns,j);
|
||||||
@@ -328,7 +313,6 @@ dump_results_pp(MdbSQL *sql)
|
|||||||
}
|
}
|
||||||
fprintf(stdout,"\n");
|
fprintf(stdout,"\n");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* footer */
|
/* footer */
|
||||||
for (j=0;j<sql->num_columns;j++) {
|
for (j=0;j<sql->num_columns;j++) {
|
||||||
|
Reference in New Issue
Block a user