cursor.c

Go to the documentation of this file.
00001 #include <stdlib.h>
00002 #include <grass/dbmi.h>
00003 
00010 void
00011 db_init_cursor ( dbCursor *cursor)
00012 {
00013     cursor->driver = NULL;
00014     cursor->token = -1;
00015     cursor->type = 0;
00016     cursor->mode = 0;
00017     cursor->table = NULL;
00018     cursor->column_flags = NULL;
00019 }
00020 
00027 int
00028 db_alloc_cursor_table ( dbCursor *cursor,
00029                        int ncols)
00030 {
00031     cursor->table = db_alloc_table (ncols);
00032     if (cursor->table == NULL)
00033         return db_get_error_code();
00034     return DB_OK;
00035 }
00036 
00043 void
00044 db_free_cursor ( dbCursor *cursor)
00045 {
00046     if (cursor->table)
00047         db_free_table (cursor->table);
00048     if (cursor->column_flags)
00049         db_free_cursor_column_flags (cursor);
00050     db_init_cursor(cursor);
00051 }
00052 
00059 dbTable *
00060 db_get_cursor_table ( dbCursor *cursor)
00061 {
00062     return cursor->table;
00063 }
00064 
00071 void
00072 db_set_cursor_table ( dbCursor *cursor,
00073                     dbTable *table)
00074 {
00075     cursor->table = table;
00076 }
00077 
00084 dbToken
00085 db_get_cursor_token(
00086                     dbCursor *cursor)
00087 {
00088     return cursor->token;
00089 }
00090 
00097 void
00098 db_set_cursor_token ( dbCursor *cursor, dbToken token)
00099 {
00100     cursor->token = token;
00101 }
00102 
00109 void
00110 db_set_cursor_type_readonly ( dbCursor *cursor)
00111 {
00112     cursor->type = DB_READONLY;
00113 }
00114 
00121 void
00122 db_set_cursor_type_update (dbCursor *cursor)
00123 {
00124     cursor->type = DB_UPDATE;
00125 }
00126 
00133 void
00134 db_set_cursor_type_insert ( dbCursor *cursor)
00135 {
00136     cursor->type = DB_INSERT;
00137 }
00138 
00145 int
00146 db_test_cursor_type_fetch( dbCursor *cursor)
00147 {
00148     return (cursor->type == DB_READONLY || cursor->type == DB_UPDATE);
00149 }
00150 
00157 int
00158 db_test_cursor_type_update( dbCursor *cursor)
00159 {
00160     return (cursor->type == DB_UPDATE);
00161 }
00162 
00169 int
00170 db_test_cursor_type_insert (dbCursor *cursor)
00171 {
00172     return (cursor->type == DB_INSERT);
00173 }
00174 
00181 void
00182 db_set_cursor_mode( dbCursor *cursor,
00183                    int mode)
00184 {
00185     cursor->mode = mode;
00186 }
00187 
00194 void
00195 db_set_cursor_mode_scroll( dbCursor *cursor)
00196 {
00197     cursor->mode |= DB_SCROLL;
00198 }
00199 
00206 void
00207 db_unset_cursor_mode_scroll ( dbCursor *cursor)
00208 {
00209     cursor->mode &= ~DB_SCROLL;
00210 }
00211 
00218 void
00219 db_unset_cursor_mode (dbCursor *cursor)
00220 {
00221     cursor->mode = 0;
00222 }
00223 
00230 void
00231 db_set_cursor_mode_insensitive ( dbCursor *cursor)
00232 {
00233     cursor->mode |= DB_INSENSITIVE;
00234 }
00235 
00242 void
00243 db_unset_cursor_mode_insensitive (dbCursor *cursor)
00244 {
00245     cursor->mode &= ~DB_INSENSITIVE;
00246 }
00247 
00254 int
00255 db_test_cursor_mode_scroll (dbCursor *cursor)
00256 {
00257     return (cursor->mode & DB_SCROLL);
00258 }
00259 
00260 
00267 int
00268 db_test_cursor_mode_insensitive (dbCursor *cursor)
00269 {
00270     return (cursor->mode & DB_INSENSITIVE);
00271 }
00272 
00279 int
00280 db_alloc_cursor_column_flags ( dbCursor *cursor)
00281 {
00282     int ncols;
00283     int col;
00284 
00285     ncols = db_get_cursor_number_of_columns (cursor);
00286     cursor->column_flags = (short *) db_calloc (ncols, sizeof(short));
00287     if (cursor->column_flags == NULL)
00288         return db_get_error_code();
00289     for (col = 0; col < ncols; col++)
00290         db_unset_cursor_column_flag (cursor, col);
00291     return DB_OK ;
00292 }
00293 
00300 void
00301 db_free_cursor_column_flags ( dbCursor *cursor)
00302 {
00303     if(cursor->column_flags)
00304         free(cursor->column_flags);
00305     cursor->column_flags = NULL;
00306 }
00307 
00314 void
00315 db_set_cursor_column_for_update ( dbCursor *cursor,
00316                                  int col)
00317 {
00318     db_set_cursor_column_flag (cursor, col);
00319 }
00320 
00327 void
00328 db_unset_cursor_column_for_update (
00329                                    dbCursor *cursor,
00330                                    int col)
00331 {
00332     db_unset_cursor_column_flag (cursor, col);
00333 }
00334 
00341 int
00342 db_test_cursor_column_for_update ( dbCursor *cursor,
00343                                   int col)
00344 {
00345     return db_test_cursor_column_flag (cursor, col);
00346 }
00347 
00354 int
00355 db_test_cursor_any_column_for_update ( dbCursor *cursor)
00356 {
00357     return db_test_cursor_any_column_flag (cursor);
00358 }
00359 
00366 void
00367 db_set_cursor_column_flag ( dbCursor *cursor,
00368                            int col)
00369 {
00370     if (cursor->column_flags)
00371         cursor->column_flags[col] = 1;
00372 }
00373 
00380 void
00381 db_unset_cursor_column_flag ( dbCursor *cursor,
00382                              int col)
00383 {
00384     if (cursor->column_flags)
00385         cursor->column_flags[col] = 0;
00386 }
00387 
00394 int
00395 db_test_cursor_column_flag ( dbCursor *cursor,
00396                             int col)
00397 {
00398     return cursor->column_flags && cursor->column_flags[col] ? 1 : 0 ;
00399 }
00400 
00407 int
00408 db_get_cursor_number_of_columns ( dbCursor *cursor)
00409 {
00410     dbTable *table;
00411 
00412     table = db_get_cursor_table (cursor);
00413     if (table)
00414         return db_get_table_number_of_columns(table);
00415     return 0;
00416 }
00417 
00424 /* is any cursor column flag set? */
00425 int
00426 db_test_cursor_any_column_flag ( dbCursor *cursor)
00427 {
00428     int ncols, col;
00429 
00430     ncols = db_get_cursor_number_of_columns(cursor);
00431     for (col = 0; col < ncols; col++)
00432         if (db_test_cursor_column_flag(cursor, col))
00433             return 1;
00434     return 0;
00435 }

Generated on Sun Apr 6 17:31:38 2008 for GRASS by  doxygen 1.5.5