bool vdcd_extract_from_phys_table( col_defs* defs, const VTable *my_table ) { bool col_defs_found = false; KNamelist *names; rc_t rc = VTableListPhysColumns( my_table, &names ); DISP_RC( rc, "VTableListPhysColumns() failed" ); if ( rc == 0 ) { uint32_t n; uint32_t found = 0; rc = KNamelistCount( names, &n ); DISP_RC( rc, "KNamelistCount() failed" ); if ( rc == 0 ) { uint32_t i; for ( i = 0; i < n && rc == 0; ++i ) { const char *col_name; rc = KNamelistGet( names, i, &col_name ); DISP_RC( rc, "KNamelistGet() failed" ); if ( rc == 0 ) { vdcd_append_col( defs, col_name ); found++; } } col_defs_found = ( found > 0 ); } rc = KNamelistRelease( names ); DISP_RC( rc, "KNamelistRelease() failed" ); } return col_defs_found; }
bool vdcd_extract_from_table( col_defs* defs, const VTable *my_table ) { bool col_defs_found = false; KNamelist *names; rc_t rc = VTableListCol( my_table, &names ); DISP_RC( rc, "VTableListCol() failed" ); if ( rc == 0 ) { const VCursor *my_cursor; rc = VTableCreateCursorRead( my_table, &my_cursor ); DISP_RC( rc, "VTableCreateCursorRead() failed" ); if ( rc == 0 ) { uint32_t n; uint32_t found = 0; rc = KNamelistCount( names, &n ); DISP_RC( rc, "KNamelistCount() failed" ); if ( rc == 0 ) { uint32_t i; for ( i = 0; i < n && rc ==0; ++i ) { const char *col_name; rc = KNamelistGet( names, i, &col_name ); DISP_RC( rc, "KNamelistGet() failed" ); if ( rc == 0 ) { p_col_def def = vdcd_append_col( defs, col_name ); rc = VCursorAddColumn( my_cursor, &(def->idx), def->name ); DISP_RC( rc, "VCursorAddColumn() failed" ); if ( rc == 0 ) { rc = VCursorDatatype( my_cursor, def->idx, &(def->type_decl), &(def->type_desc) ); DISP_RC( rc, "VCursorDatatype() failed" ); if ( rc == 0 ) { found++; } } } } col_defs_found = ( found > 0 ); } rc = VCursorRelease( my_cursor ); DISP_RC( rc, "VCursorRelease() failed" ); } rc = KNamelistRelease( names ); DISP_RC( rc, "KNamelistRelease() failed" ); } return col_defs_found; }
uint32_t vdcd_parse_string( col_defs* defs, const char* src, const VTable *my_table ) { uint32_t count, found = 0; char colname[MAX_COL_NAME_LEN+1]; size_t i_dest = 0; if ( defs == NULL ) return false; if ( src == NULL ) return false; while ( *src ) { if ( *src == ',' ) { if ( i_dest > 0 ) { colname[i_dest]=0; vdcd_append_col( defs, colname ); } i_dest = 0; } else { if ( i_dest < MAX_COL_NAME_LEN ) colname[i_dest++]=*src; } src++; } if ( i_dest > 0 ) { colname[i_dest]=0; vdcd_append_col( defs, colname ); } count = VectorLength( &defs->cols ); if ( count > 0 && my_table != NULL ) { const VCursor *my_cursor; rc_t rc = VTableCreateCursorRead( my_table, &my_cursor ); DISP_RC( rc, "VTableCreateCursorRead() failed" ); if ( rc == 0 ) { uint32_t idx; for ( idx = 0; idx < count; ++idx ) { col_def *col = ( col_def * )VectorGet( &(defs->cols), idx ); if ( col != NULL ) { rc = VCursorAddColumn( my_cursor, &(col->idx), col->name ); DISP_RC( rc, "VCursorAddColumn() failed" ); if ( rc == 0 ) { rc = VCursorDatatype( my_cursor, col->idx, &(col->type_decl), &(col->type_desc) ); DISP_RC( rc, "VCursorDatatype() failed" ); if ( rc == 0 ) found++; } } } rc = VCursorRelease( my_cursor ); DISP_RC( rc, "VCursorRelease() failed" ); } } return found; }