column.c 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499
  1. /*!
  2. \file lib/db/dbmi_base/column.c
  3. \brief DBMI Library (base) - columns management
  4. (C) 1999-2009, 2011 by the GRASS Development Team
  5. This program is free software under the GNU General Public License
  6. (>=v2). Read the file COPYING that comes with GRASS for details.
  7. \author Joel Jones (CERL/UIUC), Radim Blazek
  8. \author Doxygenized by Martin Landa <landa.martin gmail.com> (2011)
  9. */
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include <grass/gis.h>
  13. #include <grass/dbmi.h>
  14. /*!
  15. \brief Returns column value for given column structure
  16. \param column pointer to dbColumn
  17. \return pointer to dbValue
  18. */
  19. dbValue *db_get_column_value(dbColumn *column)
  20. {
  21. return &column->value;
  22. }
  23. /*!
  24. \brief Returns column default value for given column structure
  25. \param column pointer to dbColumn
  26. \return pointer to dbValue
  27. */
  28. dbValue *db_get_column_default_value(dbColumn * column)
  29. {
  30. return &column->defaultValue;
  31. }
  32. /*!
  33. \brief Define column sqltype for column
  34. The function db_sqltype_name() returns sqltype description.
  35. \code
  36. #define DB_SQL_TYPE_UNKNOWN 0
  37. #define DB_SQL_TYPE_CHARACTER 1
  38. #define DB_SQL_TYPE_SMALLINT 2
  39. #define DB_SQL_TYPE_INTEGER 3
  40. #define DB_SQL_TYPE_REAL 4
  41. #define DB_SQL_TYPE_DOUBLE_PRECISION 6
  42. #define DB_SQL_TYPE_DECIMAL 7
  43. #define DB_SQL_TYPE_NUMERIC 8
  44. #define DB_SQL_TYPE_DATE 9
  45. #define DB_SQL_TYPE_TIME 10
  46. #define DB_SQL_TYPE_TIMESTAMP 11
  47. #define DB_SQL_TYPE_INTERVAL 12
  48. #define DB_SQL_TYPE_TEXT 13
  49. #define DB_SQL_TYPE_SERIAL 21
  50. \endcode
  51. \param column pointer to dbColumn
  52. \param sqltype SQL data type (see list)
  53. */
  54. void db_set_column_sqltype(dbColumn *column, int sqltype)
  55. {
  56. column->sqlDataType = sqltype;
  57. }
  58. /*!
  59. \brief Set column host data type
  60. \param column pointer to dbColumn
  61. \param type data type
  62. */
  63. void db_set_column_host_type(dbColumn * column, int type)
  64. {
  65. column->hostDataType = type;
  66. }
  67. /*!
  68. \brief Get column scale
  69. \param column pointer to dbColumn
  70. \return scale
  71. */
  72. int db_get_column_scale(dbColumn * column)
  73. {
  74. return column->scale;
  75. }
  76. /*!
  77. \brief Set column scale
  78. \param column pointer to dbColumn
  79. \param scale column scale value
  80. */
  81. void db_set_column_scale(dbColumn * column, int scale)
  82. {
  83. column->scale = scale;
  84. }
  85. /*!
  86. \brief Get column precision
  87. \param column pointer to dbColumn
  88. \return precision
  89. */
  90. int db_get_column_precision(dbColumn * column)
  91. {
  92. return column->precision;
  93. }
  94. /*!
  95. \brief Set column precision
  96. \param column pointer to dbColumn
  97. \param precision value
  98. */
  99. void db_set_column_precision(dbColumn * column, int precision)
  100. {
  101. column->precision = precision;
  102. }
  103. /*!
  104. \brief Returns column sqltype for column
  105. The function db_sqltype_name() returns sqltype description.
  106. \param column pointer to dbColumn
  107. \return sql data type (see include/dbmi.h)
  108. */
  109. int db_get_column_sqltype(dbColumn *column)
  110. {
  111. return column->sqlDataType;
  112. }
  113. /*!
  114. \brief Get column host type
  115. \param column pointer to dbColumn
  116. \return data type (see include/dbmi.h)
  117. */
  118. int db_get_column_host_type(dbColumn * column)
  119. {
  120. return column->hostDataType;
  121. }
  122. /*!
  123. \brief Set default value identificator
  124. \param column pointer to dbColumn
  125. */
  126. void db_set_column_has_defined_default_value(dbColumn * column)
  127. {
  128. column->hasDefaultValue = 1;
  129. }
  130. /*!
  131. \brief Unset default value identificator
  132. \todo Replace by db_unset_column_has_default_value() ?
  133. \param column pointer to dbColumn
  134. */
  135. void db_set_column_has_undefined_default_value(dbColumn * column)
  136. {
  137. column->hasDefaultValue = 0;
  138. }
  139. /*!
  140. \brief Unset default value identificator
  141. \param column pointer to dbColumn
  142. */
  143. void db_unset_column_has_default_value(dbColumn * column)
  144. {
  145. column->hasDefaultValue = 0;
  146. }
  147. /*!
  148. \brief Check if column has defined default value
  149. \param column pointer to dbColumn
  150. \return 1 if true
  151. \return 0 if false
  152. */
  153. int db_test_column_has_default_value(dbColumn * column)
  154. {
  155. return (column->hasDefaultValue != 0);
  156. }
  157. /*!
  158. \brief Check if column has defined default value
  159. \param column pointer to dbColumn
  160. \return 1 if true
  161. \return 0 if false
  162. */
  163. int db_test_column_has_defined_default_value(dbColumn * column)
  164. {
  165. return (column->hasDefaultValue);
  166. }
  167. /*!
  168. \brief Check if column has defined default value
  169. \param column pointer to dbColumn
  170. \return 1 if false
  171. \return 0 if true
  172. */
  173. int db_test_column_has_undefined_default_value(dbColumn * column)
  174. {
  175. return (!column->hasDefaultValue);
  176. }
  177. /*!
  178. \brief Set default value to be used
  179. \param column pointer to dbColumn
  180. */
  181. void db_set_column_use_default_value(dbColumn * column)
  182. {
  183. column->useDefaultValue = 1;
  184. }
  185. /*!
  186. \brief Unset default value to be used
  187. \param column pointer to dbColumn
  188. */
  189. void db_unset_column_use_default_value(dbColumn * column)
  190. {
  191. column->useDefaultValue = 0;
  192. }
  193. /*!
  194. \brief Checks if default value is used
  195. \param column pointer to dbColumn
  196. \return 1 if true
  197. \return 0 if false
  198. */
  199. int db_test_column_use_default_value(dbColumn * column)
  200. {
  201. return (column->useDefaultValue != 0);
  202. }
  203. /*!
  204. \brief Set null value to be allowed
  205. \param column pointer to dbColumn
  206. */
  207. void db_set_column_null_allowed(dbColumn * column)
  208. {
  209. column->nullAllowed = 1;
  210. }
  211. /*!
  212. \brief Unset null value to be allowed
  213. \param column pointer to dbColumn
  214. */
  215. void db_unset_column_null_allowed(dbColumn * column)
  216. {
  217. column->nullAllowed = 0;
  218. }
  219. /*!
  220. \brief Checks if null value is allowed
  221. \param column pointer to dbColumn
  222. \return 1 if true
  223. \return 0 if false
  224. */
  225. int db_test_column_null_allowed(dbColumn * column)
  226. {
  227. return (column->nullAllowed != 0);
  228. }
  229. /*!
  230. \brief Get column's length
  231. \param column pointer to dbColumn
  232. \return length
  233. */
  234. int db_get_column_length(dbColumn * column)
  235. {
  236. return column->dataLen;
  237. }
  238. /*!
  239. \brief Set column's length
  240. \param column pointer to dbColumn
  241. \param length value
  242. */
  243. void db_set_column_length(dbColumn * column, int length)
  244. {
  245. column->dataLen = length;
  246. }
  247. /*!
  248. \brief Set select privilages to be granted
  249. \param column pointer to dbColumn
  250. */
  251. void db_set_column_select_priv_granted(dbColumn * column)
  252. {
  253. column->select = DB_GRANTED;
  254. }
  255. /*!
  256. \brief Unset select privilages
  257. \param column pointer to dbColumn
  258. */
  259. void db_set_column_select_priv_not_granted(dbColumn * column)
  260. {
  261. column->select = DB_NOT_GRANTED;
  262. }
  263. /*!
  264. \brief Get select privilages
  265. \param column pointer to dbColumn
  266. \return privilages
  267. */
  268. int db_get_column_select_priv(dbColumn * column)
  269. {
  270. return column->select;
  271. }
  272. /*!
  273. \brief Set update privilages to be granted
  274. \param column pointer to dbColumn
  275. */
  276. void db_set_column_update_priv_granted(dbColumn * column)
  277. {
  278. column->update = DB_GRANTED;
  279. }
  280. /*!
  281. \brief Unset update privilages
  282. \param column pointer to dbColumn
  283. */
  284. void db_set_column_update_priv_not_granted(dbColumn * column)
  285. {
  286. column->update = DB_NOT_GRANTED;
  287. }
  288. /*!
  289. \brief Get update privilages
  290. \param column pointer to dbColumn
  291. \return privilages
  292. */
  293. int db_get_column_update_priv(dbColumn * column)
  294. {
  295. return column->update;
  296. }
  297. /*!
  298. \brief Initialize dbColumn
  299. \param column pointer to dbColumn to be initialized
  300. */
  301. void db_init_column(dbColumn * column)
  302. {
  303. db_zero((void *)column, sizeof(dbColumn));
  304. db_init_string(&column->columnName);
  305. db_init_string(&column->description);
  306. db_init_string(&column->value.s);
  307. db_init_string(&column->defaultValue.s);
  308. }
  309. /*!
  310. \brief Set column name
  311. \param column pointer to dbColumn
  312. \param name column name
  313. \return DB_OK on success
  314. \return error code on failure
  315. */
  316. int db_set_column_name(dbColumn * column, const char *name)
  317. {
  318. return db_set_string(&column->columnName, name);
  319. }
  320. /*!
  321. \brief Returns column name for given column
  322. \param column pointer to dbColumn
  323. \return pointer to string with column name
  324. */
  325. const char *db_get_column_name(dbColumn * column)
  326. {
  327. return db_get_string(&column->columnName);
  328. }
  329. /*!
  330. \brief Set column description
  331. \param column pointer to dbColumn
  332. \param description column's description
  333. \return DB_OK on success
  334. \return error code on failure
  335. */
  336. int db_set_column_description(dbColumn * column, const char *description)
  337. {
  338. return db_set_string(&column->description, description);
  339. }
  340. /*!
  341. \brief Returns column description for given column
  342. \param column pointer to dbColumn
  343. \return pointer to string with column's description
  344. */
  345. const char *db_get_column_description(dbColumn * column)
  346. {
  347. return db_get_string(&column->description);
  348. }
  349. /*!
  350. \brief Frees column structure
  351. \param column pointer to dbColumn
  352. */
  353. void db_free_column(dbColumn * column)
  354. {
  355. db_free_string(&column->columnName);
  356. db_free_string(&column->value.s);
  357. /* match init? */
  358. db_free_string(&column->description);
  359. db_free_string(&column->defaultValue.s);
  360. }
  361. /*!
  362. \brief Copy a db column from source to destination
  363. \param src The column to copy from
  364. \param dest An allocated column to copy to which will be
  365. initialized. In case dest is NULL a new column will be allocated
  366. and returned
  367. \return The pointer of copied/allocated column
  368. */
  369. dbColumn *db_copy_column(dbColumn *dest, dbColumn *src)
  370. {
  371. dbColumn *new = dest;
  372. if(new == NULL)
  373. new = (dbColumn *) db_calloc(sizeof(dbColumn), 1);
  374. else
  375. db_init_column(new);
  376. db_copy_string(&new->columnName, &src->columnName);
  377. db_copy_string(&new->description, &src->description);
  378. db_copy_value(&new->defaultValue, &src->defaultValue);
  379. db_copy_value(&new->value, &src->value);
  380. new->dataLen = src->dataLen;
  381. new->hasDefaultValue = src->hasDefaultValue;
  382. new->hostDataType = src->hostDataType;
  383. new->nullAllowed = src->nullAllowed;
  384. new->precision = src->precision;
  385. new->scale = src->scale;
  386. new->select = src->select;
  387. new->sqlDataType = src->sqlDataType;
  388. new->update = src->update;
  389. new->useDefaultValue = src->useDefaultValue;
  390. return new;
  391. }