00001 #include <stdlib.h>
00002 #include <grass/dbmi.h>
00003
00010 int
00011 db_test_value_isnull (dbValue *value)
00012
00013 {
00014 return (value->isNull != 0);
00015 }
00016
00023 int
00024 db_get_value_int (dbValue *value)
00025
00026 {
00027 return (value->i);
00028 }
00029
00036 double
00037 db_get_value_double (dbValue *value)
00038
00039 {
00040 return (value->d);
00041 }
00042
00049
00050 double
00051 db_get_value_as_double (dbValue *value, int ctype)
00052
00053 {
00054 double val;
00055
00056 switch ( ctype )
00057 {
00058 case ( DB_C_TYPE_INT ):
00059 val = (double) db_get_value_int(value);
00060 break;
00061 case ( DB_C_TYPE_STRING ):
00062 val = atof ( db_get_value_string(value) );
00063 break;
00064 case ( DB_C_TYPE_DOUBLE ):
00065 val = db_get_value_double(value);
00066 break;
00067 default:
00068 val = 0;
00069 }
00070 return val;
00071 }
00072
00079 char *
00080 db_get_value_string (dbValue *value)
00081
00082 {
00083 return (db_get_string(&value->s));
00084 }
00085
00092 int
00093 db_get_value_year (dbValue *value)
00094
00095 {
00096 return (value->t.year);
00097 }
00098
00105 int
00106 db_get_value_month (dbValue *value)
00107
00108 {
00109 return (value->t.month);
00110 }
00111
00118 int
00119 db_get_value_day (dbValue *value)
00120
00121 {
00122 return (value->t.day);
00123 }
00124
00131 int
00132 db_get_value_hour (dbValue *value)
00133
00134 {
00135 return (value->t.hour);
00136 }
00137
00144 int
00145 db_get_value_minute (dbValue *value)
00146
00147 {
00148 return (value->t.minute);
00149 }
00150
00157 double
00158 db_get_value_seconds (dbValue *value)
00159
00160 {
00161 return (value->t.seconds);
00162 }
00163
00170 void
00171 db_set_value_null (dbValue *value)
00172
00173 {
00174 value->isNull = 1;
00175 }
00176
00183 void
00184 db_set_value_not_null (dbValue *value)
00185
00186 {
00187 value->isNull = 0;
00188 }
00189
00196 void
00197 db_set_value_int (dbValue *value, int i)
00198
00199 {
00200 value->i = i;
00201 db_set_value_not_null(value);
00202 }
00203
00210 void
00211 db_set_value_double (dbValue *value, double d)
00212
00213 {
00214 value->d = d;
00215 db_set_value_not_null(value);
00216 }
00217
00224 int
00225 db_set_value_string (dbValue *value, char *s)
00226
00227 {
00228 db_set_value_not_null(value);
00229 return db_set_string(&value->s, s);
00230 }
00231
00238 void
00239 db_set_value_year (dbValue *value, int year)
00240
00241 {
00242 value->t.year = year;
00243 db_set_value_datetime_not_current(value);
00244 }
00245
00252 void
00253 db_set_value_month (dbValue *value, int month)
00254
00255 {
00256 value->t.month = month;
00257 db_set_value_datetime_not_current(value);
00258 }
00259
00266 void
00267 db_set_value_day (dbValue *value, int day)
00268
00269 {
00270 value->t.day = day;
00271 db_set_value_datetime_not_current(value);
00272 }
00273
00280 void
00281 db_set_value_hour (dbValue *value, int hour)
00282
00283 {
00284 value->t.hour = hour;
00285 db_set_value_datetime_not_current(value);
00286 }
00287
00294 void
00295 db_set_value_minute (dbValue *value, int minute)
00296
00297 {
00298 value->t.minute = minute;
00299 db_set_value_datetime_not_current(value);
00300 }
00301
00308 void
00309 db_set_value_seconds (dbValue *value, double seconds)
00310
00311 {
00312 value->t.seconds = seconds;
00313 db_set_value_datetime_not_current (value);
00314 }
00315
00322 int
00323 db_test_value_datetime_current (dbValue *value)
00324
00325 {
00326 return (value->t.current != 0);
00327 }
00328
00335 void
00336 db_set_value_datetime_current (dbValue *value)
00337
00338 {
00339 value->t.current = 1;
00340 db_set_value_not_null(value);
00341 }
00342
00349 void
00350 db_set_value_datetime_not_current (dbValue *value)
00351
00352 {
00353 value->t.current = 0;
00354 db_set_value_not_null(value);
00355 }
00356
00363
00364 void
00365 db_copy_value (dbValue *dst, dbValue *src)
00366
00367 {
00368 dst->isNull = src->isNull;
00369 dst->i = src->i;
00370 dst->d = src->d;
00371 if ( src->s.nalloc > 0 )
00372 db_copy_string ( &(dst->s), &(src->s) );
00373 dst->t.current = src->t.current;
00374 dst->t.year = src->t.year;
00375 dst->t.month = src->t.month;
00376 dst->t.day = src->t.day;
00377 dst->t.hour = src->t.hour;
00378 dst->t.minute = src->t.minute;
00379 dst->t.seconds = src->t.seconds;
00380 }
00381
00388 void
00389 db_CatValArray_init( dbCatValArray *arr )
00390 {
00391 arr->n_values = 0;
00392 arr->alloc = 0;
00393 arr->value = NULL;
00394 }
00395
00402 void
00403 db_CatValArray_free( dbCatValArray *arr )
00404 {
00405 if ( arr->ctype == DB_C_TYPE_STRING || arr->ctype == DB_C_TYPE_DATETIME )
00406 {
00407 int i;
00408 for ( i = 0; i < arr->n_values; i++ ) {
00409 if ( arr->ctype == DB_C_TYPE_STRING && arr->value[i].val.s ) {
00410 db_free_string ( arr->value[i].val.s );
00411 free ( arr->value[i].val.s );
00412 }
00413 if ( arr->ctype == DB_C_TYPE_DATETIME && arr->value[i].val.t ) {
00414 free ( arr->value[i].val.t );
00415 }
00416 }
00417 }
00418
00419 free ( arr->value );
00420 }
00421
00428 int
00429 db_CatValArray_alloc( dbCatValArray *arr, int n )
00430 {
00431 arr->value = (dbCatVal *) G_calloc ( n, sizeof(dbCatVal) );
00432
00433 arr->alloc = n;
00434
00435 return DB_OK;
00436 }
00437
00444 int
00445 db_CatValArray_realloc( dbCatValArray *arr, int n )
00446 {
00447 arr->value = (dbCatVal *) G_realloc ( arr->value, n * sizeof(dbCatVal) );
00448
00449 arr->alloc = n;
00450
00451 return DB_OK;
00452 }
00453