dbmilib.dox 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804
  1. /*! \page dbmilib GRASS DBMI DataBase Management Interface
  2. by GRASS Development Team
  3. http://grass.osgeo.org
  4. \section intro Introduction
  5. The attribute management was completely changed in GRASS 6 to achieve
  6. multi-attribute capabilities managed within external databases. The former
  7. dig_cats/ files are not used any more and all vector attributes are stored
  8. in external database. Connection with database is done through <b>DBMI library</b>
  9. (DataBase Management Interface) with its integrated drivers. At time of this
  10. writing following DBMI drivers for attribute storage are available:
  11. <ul>
  12. <li> DBF: xBase files (default)
  13. <li> ODBC: to interface from http://www.unixodbc.org
  14. <li> PostgreSQL driver (note that PostgreSQL can also be accessed through
  15. ODBC): http://www.postgresql.org
  16. <li> mySQL: http://mysql.com/
  17. <li> SQLite: http://www.sqlite.org/
  18. </ul>
  19. These drivers are compiled depending on present DB related libraries and
  20. 'configure' settings. Only the DBF driver is always compiled.
  21. The default DBMI driver is defined in include/dbmi.h (#define DB_DEFAULT_DRIVER "dbf").
  22. In general records in table are linked to vector entities by field number
  23. and category number. The field number identifies a database table and the
  24. category number identifies the record record. I.e. for unique combination
  25. <tt>mapset + map + field + category</tt> exists one unique combination
  26. <tt>driver + database + table + row</tt>. Each element may have none, one or
  27. more categories (cats). More cats are distinguished by field number (field).
  28. The flexibility of this approach even supports the extreme case, that one
  29. vector entity may be linked to attributes in different tables in different
  30. databases connected by different drivers at the same time.
  31. The DBMI library contains drivers such as DBF, SQLite, ODBC, MySQL and
  32. PostgreSQL. The functionality of the database support varies with the
  33. capabilities of the underlying RDBMS. Main features are
  34. multi-attributes support for various data types, also multiple tables
  35. may optionally be linked to one or many vector entity/ies. SQL
  36. (Structured Query Language) is used for all drivers, but in a limited
  37. implementation.
  38. For DBMI architecture details please read Blazek et al. 2002 (see below).
  39. \section dbmifunc DBMI library functions
  40. The db_*() functions are the programmer's API for GRASS DBMI
  41. programming. There are three groups:
  42. <ul>
  43. <li> dbmi_base: contains functions for modules, drivers (../../db/drivers/) </li>
  44. <li> dbmi_client: contains functions for modules </li>
  45. <li> dbmi_driver: contains functions for drivers (../../db/drivers/) </li>
  46. </ul>
  47. See details here:<br>
  48. \section dbmi_base DBMI BASE functions
  49. [ to be moved here from below list ]
  50. \section dbmi_client DBMI CLIENT functions
  51. - db_add_column()
  52. - db_begin_transaction()
  53. - db_bind_update()
  54. - db_CatValArray_get_value()
  55. - db_CatValArray_get_value_double()
  56. - db_CatValArray_get_value_int()
  57. - db_CatValArray_sort()
  58. - db_CatValArray_sort_by_value()
  59. - db_close_cursor()
  60. - db_close_database()
  61. - db_close_database_shutdown_driver()
  62. - db_column_Ctype()
  63. - db_column_sqltype()
  64. - db_commit_transaction()
  65. - db_copy_table()
  66. - db_copy_table_where()
  67. - db_copy_table_select()
  68. - db_copy_table_by_ints()
  69. - db_create_database()
  70. - db_create_index()
  71. - db_create_table()
  72. - db_delete()
  73. - db_delete_database()
  74. - db_delete_table()
  75. - db_describe_table()
  76. - db_drop_column()
  77. - db_drop_index()
  78. - db_drop_table()
  79. - db_execute_immediate()
  80. - db_fetch()
  81. - db_find_database()
  82. - db_get_column()
  83. - db_get_num_rows()
  84. - db_get_table_number_of_rows()
  85. - db_grant_on_table()
  86. - db_gversion()
  87. - db_insert()
  88. - db_list_databases()
  89. - db_list_drivers()
  90. - db_list_indexes()
  91. - db_list_tables()
  92. - db_open_database()
  93. - db_open_insert_cursor()
  94. - db_open_select_cursor()
  95. - db_open_update_cursor()
  96. - db_print_column_definition()
  97. - db_print_table_definition()
  98. - db_start_driver_open_database()
  99. - db_select_CatValArray()
  100. - db_select_int()
  101. - db_select_value()
  102. - db_shutdown_driver()
  103. - db_start_driver()
  104. - db_table_exists()
  105. - db_update()
  106. - db__copy_table()
  107. \section dbmi_driver DBMI DRIVER functions
  108. - db_driver()
  109. - db_driver_mkdir()
  110. - db_d_add_column()
  111. - db_d_begin_transaction()
  112. - db_d_bind_update()
  113. - db_d_close_cursor()
  114. - db_d_close_database()
  115. - db_d_commit_transaction()
  116. - db_d_create_database()
  117. - db_d_create_index()
  118. - db_d_create_table()
  119. - db_d_delete()
  120. - db_d_delete_database()
  121. - db_d_describe_table()
  122. - db_d_drop_column()
  123. - db_d_drop_index()
  124. - db_d_drop_table()
  125. - db_d_execute_immediate()
  126. - db_d_fetch()
  127. - db_d_find_database()
  128. - db_d_get_num_rows()
  129. - db_driver_mkdir()
  130. - db_d_grant_on_table()
  131. - db_d_insert()
  132. - db_d_list_databases()
  133. - db_d_list_indexes()
  134. - db_d_list_tables()
  135. - db_d_open_database()
  136. - db_d_open_insert_cursor()
  137. - db_d_open_select_cursor()
  138. - db_d_open_update_cursor()
  139. - db_d_update()
  140. - db_d_update()
  141. - db__add_cursor_to_driver_state()
  142. - db__close_all_cursors()
  143. - db__drop_cursor_from_driver_state()
  144. - db__init_driver_state()
  145. - db__mark_database_closed()
  146. - db__mark_database_open()
  147. - db__test_database_open()
  148. \section dbmi_functions DBMI functions list (incomplete)
  149. \subsection DB_alloc_routines DB alloc routines
  150. char *#db_store (char *s)
  151. void #db_calloc (int n, int m)
  152. void #db_malloc (int n)
  153. void #db_realloc (void s, int n)
  154. \subsection DB_case_routines DB case routines
  155. int #db_nocase_compare (char *a, char *b)
  156. void #db_char_to_lowercase (char *s)
  157. void #db_char_to_uppercase (char *s)
  158. void #db_Cstring_to_lowercase (char *s)
  159. void #db_Cstring_to_uppercase (char *s)
  160. \subsection DB_column_routines DB column routines
  161. \subsection DB_columnfmt_routines DB columnfmt routines
  162. \subsection DB_connect_routines DB connect routines
  163. int #db_get_connection (dbConnection *connection )
  164. int #db_set_connection (dbConnection *connection )
  165. \subsection DB_cursor_routines DB *cursor routines
  166. dbTable *#db_get_cursor_table (dbCursor *cursor)
  167. dbToken #db_get_cursor_token (dbCursor *cursor)
  168. int #db_alloc_cursor_column_flags (dbCursor *cursor)
  169. int #db_alloc_cursor_table (dbCursor *cursor, int ncols)
  170. int #db_get_cursor_number_of_columns (dbCursor *cursor)
  171. int #db_test_cursor_any_column_flag (dbCursor *cursor)
  172. int #db_test_cursor_any_column_for_update (dbCursor *cursor)
  173. int #db_test_cursor_column_flag (dbCursor *cursor, int col)
  174. \subsection DB_datetime_routines DB datetime routines
  175. int #db_test_cursor_column_for_update (dbCursor *cursor, int col)
  176. int #db_test_cursor_mode_insensitive (dbCursor *cursor)
  177. int #db_test_cursor_mode_scroll (dbCursor *cursor)
  178. int #db_test_cursor_type_fetch (dbCursor *cursor)
  179. int #db_test_cursor_type_insert (dbCursor *cursor)
  180. int #db_test_cursor_type_update (dbCursor *cursor)
  181. void #db_free_cursor_column_flags (dbCursor *cursor)
  182. void #db_free_cursor (dbCursor *cursor)
  183. void #db_init_cursor (dbCursor *cursor)
  184. void #db_set_cursor_column_flag (dbCursor *cursor, int col)
  185. void #db_set_cursor_column_for_update (dbCursor *cursor, int col)
  186. void #db_set_cursor_mode (dbCursor *cursor, int mode)
  187. void #db_set_cursor_mode_insensitive (dbCursor *cursor)
  188. void #db_set_cursor_mode_scroll (dbCursor *cursor)
  189. void #db_set_cursor_table (dbCursor *cursor, dbTable *table)
  190. void #db_set_cursor_token (dbCursor *cursor, dbToken token)
  191. void #db_set_cursor_type_insert (dbCursor *cursor)
  192. void #db_set_cursor_type_readonly (dbCursor *cursor)
  193. void #db_set_cursor_type_update (dbCursor *cursor)
  194. void #db_unset_cursor_column_flag (dbCursor *cursor, int col)
  195. void #db_unset_cursor_column_for_update (dbCursor *cursor, int col)
  196. void #db_unset_cursor_mode (dbCursor *cursor)
  197. void #db_unset_cursor_mode_insensitive (dbCursor *cursor)
  198. void #db_unset_cursor_mode_scroll (dbCursor *cursor)
  199. \subsection DB_datetime_routines DB datetime routines
  200. \subsection DB_zero_routines DB zero routines
  201. \subsection DB_dbmscap_routines DB dbmscap routines
  202. \subsection DB_default_name_routines DB default_name routines
  203. \subsection DB_default_name_routines DB default_name routines
  204. char *#db_get_default_database ( void )
  205. char *#db_get_default_driver ( void )
  206. char *#db_get_default_group_name ( void )
  207. char *#db_get_default_schema_name ( void )
  208. \subsection DB_dirent_routines DB dirent routines
  209. \subsection DB_error_routines DB error routines
  210. \subsection DB_handle_routines DB handle routines
  211. \subsection DB_index_routines DB index routines
  212. \subsection DB_interval_routines DB interval routines
  213. \subsection DB_isdir_routines DB isdir routines
  214. \subsection DB_login_routines DB login routines
  215. \subsection DB_ret_codes_routines DB ret_codes routines
  216. \subsection DB_sqlCtype_routines DB sqlCtype routines
  217. \subsection DB_sqlCtype_routines DB sqlCtype routines
  218. \subsection DB_sqltype_routines DB sqltype routines
  219. \subsection DB_string_routines DB string routines
  220. \subsection DB_strip_routines DB strip routines
  221. \subsection DB_table_routines DB table routines
  222. \subsection DB_token_routines DB token routines
  223. \subsection DB_value_routines DB value routines
  224. \subsection DB_valuefmt_routines DB valuefmt routines
  225. \subsection DB_whoami_routines DB whoami routines
  226. \subsection DB_xdr_routines DB xdr routines
  227. \subsection DB_xdrchar_routines DB xdrchar *routines
  228. \subsection DB_xdrchar_routines DB xdrchar *routines
  229. \subsection DB_xdrcolumn_routines DB xdrcolumn routines
  230. \subsection DB_xdrdatetime_routines DB xdrdatetime routines
  231. \subsection DB_xdrdouble_routines DB xdrdouble routines
  232. \subsection DB_xdrfloat_routines DB xdrfloat routines
  233. \subsection DB_xdrhandle_routines DB xdrhandle routines
  234. \subsection DB_xdrindex_routines DB xdrindex routines
  235. \subsection DB_xdrint_routines DB xdrint routines
  236. \subsection DB_xdrprocedure_routines DB xdrprocedure routines
  237. \subsection DB_xdrshort_routines DB xdrshort routines
  238. \subsection DB_xdrstring_routines DB xdrstring routines
  239. \subsection DB_xdrstring_routines DB xdrstring routines
  240. \subsection DB_xdrtable_routines DB xdrtable routines
  241. \subsection DB_xdrtoken_routines DB xdrtoken routines
  242. \subsection DB_xdrvalue_routines DB xdrvalue routines
  243. \subsection DB_c_add_col_routines DB c_add_col routines
  244. int #db_add_column (dbDriver driver, dbString *tableName, dbColumn column)
  245. \subsection DB_c_bindupdate_routines DB c_bindupdate routines
  246. int #db_bind_update (dbCursor *cursor)
  247. \subsection DB_c_close_cur_routines DB c_close_cur routines
  248. int #db_close_cursor (dbCursor *cursor)
  249. \subsection DB_c_closedb_routines DB c_closedb routines
  250. int #db_close_database (dbDriver driver)
  251. \subsection DB_c_create_idx_routines DB c_create_idx routines
  252. int #db_create_index (dbDriver driver, dbIndex index)
  253. \subsection DB_c_create_tab_routines DB c_create_tab routines
  254. int #db_create_table (dbDriver driver, dbTable *table)
  255. \subsection DB_c_createdb_routines DB c_createdb routines
  256. \subsection DB_c_createdb_routines DB c_createdb routines
  257. int #db_create_database (dbDriver driver, dbHandle *handle)
  258. \subsection DB_c_delete_routines DB c_delete routines
  259. int #db_delete (dbCursor *cursor)
  260. \subsection DB_c_deletedb_routines DB c_deletedb routines
  261. int #db_delete_database (dbDriver driver, dbHandle *handle)
  262. \subsection DB_c_desc_table_routines DB c_desc_table routines
  263. int #db_describe_table (dbDriver driver, dbString *name, dbTable *table)
  264. \subsection DB_c_drop_col_routines DB c_drop_col routines
  265. int #db_drop_column (dbDriver driver, dbString *tableName, dbString *columnName)
  266. \subsection DB_c_drop_index_routines DB c_drop_index routines
  267. int #db_drop_index (dbDriver driver, dbString *name)
  268. \subsection DB_c_drop_tab_routines DB c_drop_tab routines
  269. int #db_drop_table (dbDriver driver, dbString *name)
  270. \subsection DB_c_execute_routines DB c_execute routines
  271. int #db_begin_transaction (dbDriver driver)
  272. int #db_commit_transaction (dbDriver driver)
  273. int #db_execute_immediate (dbDriver driver, dbString *SQLstatement)
  274. \subsection DB_c_fetch_routines DB c_fetch routines
  275. int #db_fetch (dbCursor *cursor, int position, int more)
  276. \subsection DB_c_find#db_routines DB c_finddb routines
  277. \subsection DB_c_find#db_routines DB c_finddb routines
  278. int #db_find_database (dbDriver driver, dbHandle *handle, int found)
  279. \subsection DB_c_insert_routines DB c_insert routines
  280. int #db_insert (dbCursor *cursor)
  281. \subsection DB_c_list_drivers_routines DB c_list_drivers routines
  282. char *#db_list_drivers (void)
  283. \subsection DB_c_list_idx_routines DB c_list_idx routines
  284. int #db_list_indexes (dbDriver driver, dbString *table_name, dbIndex list, int count)
  285. \subsection DB_c_list_tabs_routines DB c_list_tabs routines
  286. int #db_list_tables (dbDriver driver, dbString *names, int count, int system)
  287. \subsection DB_c_listdb_routines DB c_listdb routines
  288. int #db_list_databases (dbDriver driver, dbString *path, int npaths, dbHandle *handles, int count)
  289. \subsection DB_c_opendb_routines DB c_opendb routines
  290. \subsection DB_c_openinsert_routines DB c_openinsert routines
  291. \subsection DB_c_openselect_routines DB c_openselect routines
  292. \subsection DB_c_openupdate_routines DB c_openupdate routines
  293. \subsection DB_c_priv_routines DB c_priv routines
  294. \subsection DB_c_priv_routines DB c_priv routines
  295. \subsection DB_c_rows_routines DB c_rows routines
  296. int #db_get_num_rows ( dbCursor *cursor )
  297. \subsection DB_c_update_routines DB c_update routines
  298. \subsection DB_c_version_routines DB c_version routines
  299. \subsection DB_copy_tab_routines DB copy_tab routines
  300. int #db_copy_table ()
  301. int #db_copy_table_by_ints ()
  302. int #db_copy_table_select ()
  303. int #db_copy_table_where ()
  304. \subsection DB_db_routines DB db routines
  305. int #db_close_database_shutdown_driver ()
  306. int #db_start_driver_open_database ()
  307. \subsection DB_delete_tab_routines DB delete_tab routines
  308. int #db_delete_table ()
  309. \subsection DB_printtab_routines DB printtab routines
  310. \subsection DB_select_routines DB select routines
  311. \subsection DB_shutdown_routines DB shutdown routines
  312. \subsection DB_shutdown_routines DB shutdown routines
  313. \subsection DB_start_routines DB start routines
  314. \subsection DB_d_add_col_routines DB d_add_col routines
  315. \subsection DB_d_bindupdate_routines DB d_bindupdate routines
  316. \subsection DB_d_close_cur_routines DB d_close_cur routines
  317. \subsection DB_d_closedb_routines DB d_closedb routines
  318. \subsection DB_d_create_idx_routines DB d_create_idx routines
  319. \subsection DB_d_create_tab_routines DB d_create_tab routines
  320. \subsection DB_d_createdb_routines DB d_createdb routines
  321. \subsection DB_d_delete_routines DB d_delete routines
  322. \subsection DB_d_deletedb_routines DB d_deletedb routines
  323. \subsection DB_d_deletedb_routines DB d_deletedb routines
  324. \subsection DB_d_desc_table_routines DB d_desc_table routines
  325. \subsection DB_d_drop_col_routines DB d_drop_col routines
  326. \subsection DB_d_drop_index_routines DB d_drop_index routines
  327. \subsection DB_d_drop_tab_routines DB d_drop_tab routines
  328. \subsection DB_d_execute_routines DB d_execute routines
  329. \subsection DB_d_fetch_routines DB d_fetch routines
  330. \subsection DB_d_finddb_routines DB d_finddb routines
  331. \subsection DB_d_insert_routines DB d_insert routines
  332. \subsection DB_d_list_idx_routines DB d_list_idx routines
  333. \subsection DB_d_list_tabs_routines DB d_list_tabs routines
  334. \subsection DB_d_list_tabs_routines DB d_list_tabs routines
  335. \subsection DB_d_listdb_routines DB d_listdb routines
  336. int #db_d_list_databases (void)
  337. \subsection DB_d_mkdir_routines DB d_mkdir routines
  338. \subsection DB_d_opendb_routines DB d_opendb routines
  339. \subsection DB_d_openinsert_routines DB d_openinsert routines
  340. \subsection DB_d_openselect_routines DB d_openselect routines
  341. \subsection DB_d_openupdate_routines DB d_openupdate routines
  342. \subsection DB_d_priv_routines DB d_priv routines
  343. \subsection DB_d_rows_routines DB d_rows routines
  344. \subsection DB_d_update_routines DB d_update routines
  345. \subsection DB_d_version_routines DB d_version routines
  346. \subsection DB_d_version_routines DB d_version routines
  347. \subsection DB_driver_routines DB driver routines
  348. int #db_driver ()
  349. \subsection DB_driver_state_routines DB driver_state routines
  350. \section contacts Contacts
  351. GRASS Development Team: http://grass.osgeo.org (preferably developers mailing list)
  352. \section references References
  353. Text based on: R. Blazek, M. Neteler, and R. Micarelli. The new GRASS 5.1
  354. vector architecture. In Open source GIS - GRASS users conference 2002,
  355. Trento, Italy, 11-13 September 2002. University of Trento, Italy, 2002.
  356. http://www.ing.unitn.it/~grass/proceedings/proceedings/pdfs/Blazek_Radim.pdf
  357. \section seealso See Also
  358. GRASS 6 Vector Architecture: \ref vectorlib
  359. Last change: $Date$
  360. */