GRASS Programmer's Manual  6.5.svn(2014)-r66266
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
cursor.c
Go to the documentation of this file.
1 #include <stdlib.h>
2 #include <grass/dbmi.h>
3 
10 void db_init_cursor(dbCursor * cursor)
11 {
12  cursor->driver = NULL;
13  cursor->token = -1;
14  cursor->type = 0;
15  cursor->mode = 0;
16  cursor->table = NULL;
17  cursor->column_flags = NULL;
18 }
19 
26 int db_alloc_cursor_table(dbCursor * cursor, int ncols)
27 {
28  cursor->table = db_alloc_table(ncols);
29  if (cursor->table == NULL)
30  return db_get_error_code();
31  return DB_OK;
32 }
33 
40 void db_free_cursor(dbCursor * cursor)
41 {
42  if (cursor->table)
43  db_free_table(cursor->table);
44  if (cursor->column_flags)
46  db_init_cursor(cursor);
47 }
48 
55 dbTable *db_get_cursor_table(dbCursor * cursor)
56 {
57  return cursor->table;
58 }
59 
66 void db_set_cursor_table(dbCursor * cursor, dbTable * table)
67 {
68  cursor->table = table;
69 }
70 
77 dbToken db_get_cursor_token(dbCursor * cursor)
78 {
79  return cursor->token;
80 }
81 
88 void db_set_cursor_token(dbCursor * cursor, dbToken token)
89 {
90  cursor->token = token;
91 }
92 
99 void db_set_cursor_type_readonly(dbCursor * cursor)
100 {
101  cursor->type = DB_READONLY;
102 }
103 
110 void db_set_cursor_type_update(dbCursor * cursor)
111 {
112  cursor->type = DB_UPDATE;
113 }
114 
121 void db_set_cursor_type_insert(dbCursor * cursor)
122 {
123  cursor->type = DB_INSERT;
124 }
125 
132 int db_test_cursor_type_fetch(dbCursor * cursor)
133 {
134  return (cursor->type == DB_READONLY || cursor->type == DB_UPDATE);
135 }
136 
143 int db_test_cursor_type_update(dbCursor * cursor)
144 {
145  return (cursor->type == DB_UPDATE);
146 }
147 
154 int db_test_cursor_type_insert(dbCursor * cursor)
155 {
156  return (cursor->type == DB_INSERT);
157 }
158 
165 void db_set_cursor_mode(dbCursor * cursor, int mode)
166 {
167  cursor->mode = mode;
168 }
169 
176 void db_set_cursor_mode_scroll(dbCursor * cursor)
177 {
178  cursor->mode |= DB_SCROLL;
179 }
180 
187 void db_unset_cursor_mode_scroll(dbCursor * cursor)
188 {
189  cursor->mode &= ~DB_SCROLL;
190 }
191 
198 void db_unset_cursor_mode(dbCursor * cursor)
199 {
200  cursor->mode = 0;
201 }
202 
209 void db_set_cursor_mode_insensitive(dbCursor * cursor)
210 {
211  cursor->mode |= DB_INSENSITIVE;
212 }
213 
220 void db_unset_cursor_mode_insensitive(dbCursor * cursor)
221 {
222  cursor->mode &= ~DB_INSENSITIVE;
223 }
224 
231 int db_test_cursor_mode_scroll(dbCursor * cursor)
232 {
233  return (cursor->mode & DB_SCROLL);
234 }
235 
236 
243 int db_test_cursor_mode_insensitive(dbCursor * cursor)
244 {
245  return (cursor->mode & DB_INSENSITIVE);
246 }
247 
254 int db_alloc_cursor_column_flags(dbCursor * cursor)
255 {
256  int ncols;
257  int col;
258 
259  ncols = db_get_cursor_number_of_columns(cursor);
260  cursor->column_flags = (short *)db_calloc(ncols, sizeof(short));
261  if (cursor->column_flags == NULL)
262  return db_get_error_code();
263  for (col = 0; col < ncols; col++)
264  db_unset_cursor_column_flag(cursor, col);
265  return DB_OK;
266 }
267 
274 void db_free_cursor_column_flags(dbCursor * cursor)
275 {
276  if (cursor->column_flags)
277  db_free(cursor->column_flags);
278  cursor->column_flags = NULL;
279 }
280 
287 void db_set_cursor_column_for_update(dbCursor * cursor, int col)
288 {
289  db_set_cursor_column_flag(cursor, col);
290 }
291 
298 void db_unset_cursor_column_for_update(dbCursor * cursor, int col)
299 {
300  db_unset_cursor_column_flag(cursor, col);
301 }
302 
309 int db_test_cursor_column_for_update(dbCursor * cursor, int col)
310 {
311  return db_test_cursor_column_flag(cursor, col);
312 }
313 
321 {
322  return db_test_cursor_any_column_flag(cursor);
323 }
324 
331 void db_set_cursor_column_flag(dbCursor * cursor, int col)
332 {
333  if (cursor->column_flags)
334  cursor->column_flags[col] = 1;
335 }
336 
343 void db_unset_cursor_column_flag(dbCursor * cursor, int col)
344 {
345  if (cursor->column_flags)
346  cursor->column_flags[col] = 0;
347 }
348 
355 int db_test_cursor_column_flag(dbCursor * cursor, int col)
356 {
357  return cursor->column_flags && cursor->column_flags[col] ? 1 : 0;
358 }
359 
366 int db_get_cursor_number_of_columns(dbCursor * cursor)
367 {
368  dbTable *table;
369 
370  table = db_get_cursor_table(cursor);
371  if (table)
372  return db_get_table_number_of_columns(table);
373  return 0;
374 }
375 
382 /* is any cursor column flag set? */
383 int db_test_cursor_any_column_flag(dbCursor * cursor)
384 {
385  int ncols, col;
386 
387  ncols = db_get_cursor_number_of_columns(cursor);
388  for (col = 0; col < ncols; col++)
389  if (db_test_cursor_column_flag(cursor, col))
390  return 1;
391  return 0;
392 }
int db_test_cursor_mode_scroll(dbCursor *cursor)
Definition: cursor.c:231
void db_unset_cursor_mode_insensitive(dbCursor *cursor)
Definition: cursor.c:220
void db_unset_cursor_column_for_update(dbCursor *cursor, int col)
Definition: cursor.c:298
void db_unset_cursor_mode_scroll(dbCursor *cursor)
Definition: cursor.c:187
dbTable * db_alloc_table(int ncols)
void * db_calloc(int n, int m)
void db_set_cursor_column_for_update(dbCursor *cursor, int col)
Definition: cursor.c:287
int db_test_cursor_column_flag(dbCursor *cursor, int col)
Definition: cursor.c:355
int db_test_cursor_mode_insensitive(dbCursor *cursor)
Definition: cursor.c:243
void db_set_cursor_type_readonly(dbCursor *cursor)
Definition: cursor.c:99
void db_set_cursor_type_update(dbCursor *cursor)
Definition: cursor.c:110
dbTable * db_get_cursor_table(dbCursor *cursor)
Definition: cursor.c:55
void db_init_cursor(dbCursor *cursor)
Definition: cursor.c:10
void db_set_cursor_type_insert(dbCursor *cursor)
Definition: cursor.c:121
dbToken db_get_cursor_token(dbCursor *cursor)
Definition: cursor.c:77
int db_get_error_code(void)
int db_get_table_number_of_columns(dbTable *table)
void db_set_cursor_column_flag(dbCursor *cursor, int col)
Definition: cursor.c:331
int db_alloc_cursor_column_flags(dbCursor *cursor)
Definition: cursor.c:254
void db_unset_cursor_column_flag(dbCursor *cursor, int col)
Definition: cursor.c:343
int db_test_cursor_any_column_for_update(dbCursor *cursor)
Definition: cursor.c:320
int db_test_cursor_type_insert(dbCursor *cursor)
Definition: cursor.c:154
void db_free_cursor_column_flags(dbCursor *cursor)
Definition: cursor.c:274
void db_set_cursor_mode(dbCursor *cursor, int mode)
Definition: cursor.c:165
void db_free_cursor(dbCursor *cursor)
Definition: cursor.c:40
return NULL
Definition: dbfopen.c:1394
int db_test_cursor_type_fetch(dbCursor *cursor)
Definition: cursor.c:132
void db_free_table(dbTable *table)
int db_get_cursor_number_of_columns(dbCursor *cursor)
Definition: cursor.c:366
void db_unset_cursor_mode(dbCursor *cursor)
Definition: cursor.c:198
void db_set_cursor_token(dbCursor *cursor, dbToken token)
Definition: cursor.c:88
void db_set_cursor_table(dbCursor *cursor, dbTable *table)
Definition: cursor.c:66
void db_set_cursor_mode_insensitive(dbCursor *cursor)
Definition: cursor.c:209
int db_alloc_cursor_table(dbCursor *cursor, int ncols)
Definition: cursor.c:26
int db_test_cursor_any_column_flag(dbCursor *cursor)
Definition: cursor.c:383
int db_test_cursor_type_update(dbCursor *cursor)
Definition: cursor.c:143
void db_set_cursor_mode_scroll(dbCursor *cursor)
Definition: cursor.c:176
void db_free(void *s)
int db_test_cursor_column_for_update(dbCursor *cursor, int col)
Definition: cursor.c:309
tuple mode
Definition: tools.py:1481