GRASS 8 Programmer's Manual 8.6.0dev(2026)-4bb960b182
Loading...
Searching...
No Matches
dbmi_base/column.c
Go to the documentation of this file.
1/*!
2 \file lib/db/dbmi_base/column.c
3
4 \brief DBMI Library (base) - columns management
5
6 SPDX-FileCopyrightText: 1999-2009, 2011 GRASS Development Team
7 SPDX-License-Identifier: GPL-2.0-or-later
8
9 \author Joel Jones (CERL/UIUC), Radim Blazek
10 \author Doxygenized by Martin Landa <landa.martin gmail.com> (2011)
11 */
12
13#include <stdlib.h>
14#include <string.h>
15#include <grass/gis.h>
16#include <grass/dbmi.h>
17
18/*!
19 \brief Returns column value for given column structure
20
21 \param column pointer to dbColumn
22
23 \return pointer to dbValue
24 */
26{
27 return &column->value;
28}
29
30/*!
31 \brief Returns column default value for given column structure
32
33 \param column pointer to dbColumn
34
35 \return pointer to dbValue
36 */
38{
39 return &column->defaultValue;
40}
41
42/*!
43 \brief Define column sqltype for column
44
45 The function db_sqltype_name() returns sqltype description.
46
47 \code
48 #define DB_SQL_TYPE_UNKNOWN 0
49
50 #define DB_SQL_TYPE_CHARACTER 1
51 #define DB_SQL_TYPE_SMALLINT 2
52 #define DB_SQL_TYPE_INTEGER 3
53 #define DB_SQL_TYPE_REAL 4
54 #define DB_SQL_TYPE_DOUBLE_PRECISION 6
55 #define DB_SQL_TYPE_DECIMAL 7
56 #define DB_SQL_TYPE_NUMERIC 8
57 #define DB_SQL_TYPE_DATE 9
58 #define DB_SQL_TYPE_TIME 10
59 #define DB_SQL_TYPE_TIMESTAMP 11
60 #define DB_SQL_TYPE_INTERVAL 12
61 #define DB_SQL_TYPE_TEXT 13
62
63 #define DB_SQL_TYPE_SERIAL 21
64 \endcode
65
66 \param column pointer to dbColumn
67 \param sqltype SQL data type (see list)
68 */
70{
71 column->sqlDataType = sqltype;
72}
73
74/*!
75 \brief Set column host data type
76
77 \param column pointer to dbColumn
78 \param type data type
79 */
81{
82 column->hostDataType = type;
83}
84
85/*!
86 \brief Get column scale
87
88 \param column pointer to dbColumn
89
90 \return scale
91 */
93{
94 return column->scale;
95}
96
97/*!
98 \brief Set column scale
99
100 \param column pointer to dbColumn
101 \param scale column scale value
102 */
104{
105 column->scale = scale;
106}
107
108/*!
109 \brief Get column precision
110
111 \param column pointer to dbColumn
112
113 \return precision
114 */
116{
117 return column->precision;
118}
119
120/*!
121 \brief Set column precision
122
123 \param column pointer to dbColumn
124 \param precision value
125 */
127{
128 column->precision = precision;
129}
130
131/*!
132 \brief Returns column sqltype for column
133
134 The function db_sqltype_name() returns sqltype description.
135
136 \param column pointer to dbColumn
137
138 \return sql data type (see include/dbmi.h)
139 */
141{
142 return column->sqlDataType;
143}
144
145/*!
146 \brief Get column host type
147
148 \param column pointer to dbColumn
149
150 \return data type (see include/dbmi.h)
151 */
153{
154 return column->hostDataType;
155}
156
157/*!
158 \brief Set default value identificator
159
160 \param column pointer to dbColumn
161 */
163{
164 column->hasDefaultValue = 1;
165}
166
167/*!
168 \brief Unset default value identificator
169
170 \todo Replace by db_unset_column_has_default_value() ?
171
172 \param column pointer to dbColumn
173 */
175{
176 column->hasDefaultValue = 0;
177}
178
179/*!
180 \brief Unset default value identificator
181
182 \param column pointer to dbColumn
183 */
185{
186 column->hasDefaultValue = 0;
187}
188
189/*!
190 \brief Check if column has defined default value
191
192 \param column pointer to dbColumn
193
194 \return 1 if true
195 \return 0 if false
196 */
198{
199 return (column->hasDefaultValue != 0);
200}
201
202/*!
203 \brief Check if column has defined default value
204
205 \param column pointer to dbColumn
206
207 \return 1 if true
208 \return 0 if false
209 */
211{
212 return (column->hasDefaultValue);
213}
214
215/*!
216 \brief Check if column has defined default value
217
218 \param column pointer to dbColumn
219
220 \return 1 if false
221 \return 0 if true
222 */
224{
225 return (!column->hasDefaultValue);
226}
227
228/*!
229 \brief Set default value to be used
230
231 \param column pointer to dbColumn
232 */
234{
235 column->useDefaultValue = 1;
236}
237
238/*!
239 \brief Unset default value to be used
240
241 \param column pointer to dbColumn
242 */
244{
245 column->useDefaultValue = 0;
246}
247
248/*!
249 \brief Checks if default value is used
250
251 \param column pointer to dbColumn
252
253 \return 1 if true
254 \return 0 if false
255 */
257{
258 return (column->useDefaultValue != 0);
259}
260
261/*!
262 \brief Set null value to be allowed
263
264 \param column pointer to dbColumn
265 */
267{
268 column->nullAllowed = 1;
269}
270
271/*!
272 \brief Unset null value to be allowed
273
274 \param column pointer to dbColumn
275 */
277{
278 column->nullAllowed = 0;
279}
280
281/*!
282 \brief Checks if null value is allowed
283
284 \param column pointer to dbColumn
285
286 \return 1 if true
287 \return 0 if false
288 */
290{
291 return (column->nullAllowed != 0);
292}
293
294/*!
295 \brief Get column's length
296
297 \param column pointer to dbColumn
298
299 \return length
300 */
302{
303 return column->dataLen;
304}
305
306/*!
307 \brief Set column's length
308
309 \param column pointer to dbColumn
310 \param length value
311 */
313{
314 column->dataLen = length;
315}
316
317/*!
318 \brief Set select privileges to be granted
319
320 \param column pointer to dbColumn
321 */
326
327/*!
328 \brief Unset select privileges
329
330 \param column pointer to dbColumn
331 */
336
337/*!
338 \brief Get select privileges
339
340 \param column pointer to dbColumn
341
342 \return privileges
343 */
345{
346 return column->select;
347}
348
349/*!
350 \brief Set update privileges to be granted
351
352 \param column pointer to dbColumn
353 */
358
359/*!
360 \brief Unset update privileges
361
362 \param column pointer to dbColumn
363 */
368
369/*!
370 \brief Get update privileges
371
372 \param column pointer to dbColumn
373
374 \return privileges
375 */
377{
378 return column->update;
379}
380
381/*!
382 \brief Initialize dbColumn
383
384 \param column pointer to dbColumn to be initialized
385 */
387{
388 db_zero((void *)column, sizeof(dbColumn));
389 db_init_string(&column->columnName);
390 db_init_string(&column->description);
391 db_init_string(&column->value.s);
392 db_init_string(&column->defaultValue.s);
393}
394
395/*!
396 \brief Set column name
397
398 \param column pointer to dbColumn
399 \param name column name
400
401 \return DB_OK on success
402 \return error code on failure
403 */
405{
406 return db_set_string(&column->columnName, name);
407}
408
409/*!
410 \brief Returns column name for given column
411
412 \param column pointer to dbColumn
413
414 \return pointer to string with column name
415 */
417{
418 return db_get_string(&column->columnName);
419}
420
421/*!
422 \brief Set column description
423
424 \param column pointer to dbColumn
425 \param description column's description
426
427 \return DB_OK on success
428 \return error code on failure
429 */
430int db_set_column_description(dbColumn *column, const char *description)
431{
432 return db_set_string(&column->description, description);
433}
434
435/*!
436 \brief Returns column description for given column
437
438 \param column pointer to dbColumn
439
440 \return pointer to string with column's description
441 */
443{
444 return db_get_string(&column->description);
445}
446
447/*!
448 \brief Frees column structure
449
450 \param column pointer to dbColumn
451 */
453{
454 db_free_string(&column->columnName);
455 db_free_string(&column->value.s);
456 /* match init? */
457 db_free_string(&column->description);
458 db_free_string(&column->defaultValue.s);
459}
460
461/*!
462 \brief Copy a db column from source to destination
463
464 \param src The column to copy from
465 \param dest An allocated column to copy to which will be
466 initialized. In case dest is NULL a new column will be allocated
467 and returned
468 \return The pointer of copied/allocated column
469 */
471{
472 dbColumn *new = dest;
473
474 if (new == NULL)
475 new = (dbColumn *)db_calloc(sizeof(dbColumn), 1);
476 else
477 db_init_column(new);
478
479 db_copy_string(&new->columnName, &src->columnName);
480 db_copy_string(&new->description, &src->description);
481 db_copy_value(&new->defaultValue, &src->defaultValue);
482 db_copy_value(&new->value, &src->value);
483 new->dataLen = src->dataLen;
484 new->hasDefaultValue = src->hasDefaultValue;
485 new->hostDataType = src->hostDataType;
486 new->nullAllowed = src->nullAllowed;
487 new->precision = src->precision;
488 new->scale = src->scale;
489 new->select = src->select;
490 new->sqlDataType = src->sqlDataType;
491 new->update = src->update;
492 new->useDefaultValue = src->useDefaultValue;
493
494 return new;
495}
#define NULL
Definition ccmath.h:32
Main header of GRASS DataBase Management Interface.
#define DB_NOT_GRANTED
Definition dbmi.h:127
#define DB_GRANTED
Definition dbmi.h:126
void db_set_column_update_priv_granted(dbColumn *column)
Set update privileges to be granted.
void db_set_column_null_allowed(dbColumn *column)
Set null value to be allowed.
void db_init_column(dbColumn *column)
Initialize dbColumn.
dbValue * db_get_column_default_value(dbColumn *column)
Returns column default value for given column structure.
dbValue * db_get_column_value(dbColumn *column)
Returns column value for given column structure.
void db_set_column_host_type(dbColumn *column, int type)
Set column host data type.
int db_get_column_length(dbColumn *column)
Get column's length.
int db_set_column_name(dbColumn *column, const char *name)
Set column name.
int db_test_column_has_default_value(dbColumn *column)
Check if column has defined default value.
void db_unset_column_null_allowed(dbColumn *column)
Unset null value to be allowed.
void db_set_column_precision(dbColumn *column, int precision)
Set column precision.
void db_set_column_use_default_value(dbColumn *column)
Set default value to be used.
void db_set_column_has_defined_default_value(dbColumn *column)
Set default value identificator.
void db_set_column_update_priv_not_granted(dbColumn *column)
Unset update privileges.
void db_set_column_has_undefined_default_value(dbColumn *column)
Unset default value identificator.
int db_set_column_description(dbColumn *column, const char *description)
Set column description.
int db_test_column_use_default_value(dbColumn *column)
Checks if default value is used.
void db_set_column_select_priv_not_granted(dbColumn *column)
Unset select privileges.
void db_unset_column_has_default_value(dbColumn *column)
Unset default value identificator.
int db_get_column_scale(dbColumn *column)
Get column scale.
int db_get_column_update_priv(dbColumn *column)
Get update privileges.
void db_free_column(dbColumn *column)
Frees column structure.
int db_get_column_select_priv(dbColumn *column)
Get select privileges.
void db_unset_column_use_default_value(dbColumn *column)
Unset default value to be used.
int db_get_column_sqltype(dbColumn *column)
Returns column sqltype for column.
dbColumn * db_copy_column(dbColumn *dest, dbColumn *src)
Copy a db column from source to destination.
const char * db_get_column_description(dbColumn *column)
Returns column description for given column.
void db_set_column_select_priv_granted(dbColumn *column)
Set select privileges to be granted.
int db_get_column_precision(dbColumn *column)
Get column precision.
void db_set_column_length(dbColumn *column, int length)
Set column's length.
int db_test_column_null_allowed(dbColumn *column)
Checks if null value is allowed.
int db_get_column_host_type(dbColumn *column)
Get column host type.
const char * db_get_column_name(dbColumn *column)
Returns column name for given column.
void db_set_column_sqltype(dbColumn *column, int sqltype)
Define column sqltype for column.
void db_set_column_scale(dbColumn *column, int scale)
Set column scale.
int db_test_column_has_defined_default_value(dbColumn *column)
Check if column has defined default value.
int db_test_column_has_undefined_default_value(dbColumn *column)
Check if column has defined default value.
void db_copy_value(dbValue *, dbValue *)
Copy value.
Definition value.c:338
int db_copy_string(dbString *, const dbString *)
Copy dbString.
Definition string.c:228
void db_free_string(dbString *)
Free allocated space for dbString.
Definition string.c:148
void * db_calloc(int, int)
Allocate memory.
char * db_get_string(const dbString *)
Get string.
Definition string.c:138
int db_set_string(dbString *, const char *)
Inserts string to dbString (enlarge string)
Definition string.c:39
void db_zero(void *, int)
Zero allocated space.
void db_init_string(dbString *)
Initialize dbString.
Definition string.c:23
const char * name
Definition named_colr.c:6
char nullAllowed
Definition dbmi.h:202
char hasDefaultValue
Definition dbmi.h:203
int select
Definition dbmi.h:206
int update
Definition dbmi.h:207
dbValue defaultValue
Definition dbmi.h:205
int precision
Definition dbmi.h:200
dbValue value
Definition dbmi.h:198
char useDefaultValue
Definition dbmi.h:204
dbString columnName
Definition dbmi.h:194
int hostDataType
Definition dbmi.h:197
int dataLen
Definition dbmi.h:199
int scale
Definition dbmi.h:201
dbString description
Definition dbmi.h:195
int sqlDataType
Definition dbmi.h:196