12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- /**********************************************************
- * MODULE: mysql
- * AUTHOR(S): Radim Blazek (radim.blazek@gmail.com)
- * PURPOSE: MySQL database driver
- * COPYRIGHT: (C) 2001 by the GRASS Development Team
- * This program is free software under the
- * GNU General Public License (>=v2).
- * Read the file COPYING that comes with GRASS
- * for details.
- **********************************************************/
- #include <stdlib.h>
- #include <grass/dbmi.h>
- #include <grass/gis.h>
- #include <grass/glocale.h>
- #include "globals.h"
- #include "proto.h"
- int db__driver_execute_immediate(dbString *sql)
- {
- char *str;
- init_error();
- /* In addition to standard escape character ' (apostrophe)
- * MySQL supports also \ (backslash). Because this is not SQL
- * standard, GRASS modules cannot escape all \ in the text
- * because other drivers do not support this feature.
- * For example, if a text contains string \' GRASS modules
- * escape ' by another ' and the string passed to the driver is \''
- * MySQL converts \' to ' but second ' remains not escaped and
- * result is error.
- * Because of this, all occurencies of \ in sql must be
- * escaped by \ */
- str = G_str_replace ( db_get_string(sql), "\\", "\\\\" );
- G_debug ( 3, "Escaped SQL: %s", str );
- if ( mysql_query ( connection, str ) != 0 )
- {
- append_error( "Cannot execute: \n" );
- append_error( str );
- append_error( "\n" );
- append_error ( mysql_error(connection) );
- report_error();
- if ( str )
- G_free ( str );
- return DB_FAILED;
- }
-
- if ( str )
- G_free ( str );
- return DB_OK;
- }
- int db__driver_begin_transaction(void)
- {
- G_debug (2, "mysql: START TRANSACTION");
- init_error();
- if ( mysql_query ( connection, "START TRANSACTION" ) != 0 )
- {
- append_error( "Cannot start transaction: \n" );
- append_error ( mysql_error(connection) );
- report_error();
- return DB_FAILED;
- }
- return DB_OK;
- }
- int db__driver_commit_transaction(void)
- {
- G_debug (2, "mysql: COMMIT");
- init_error();
- if ( mysql_query ( connection, "COMMIT" ) != 0 )
- {
- append_error( "Cannot commit transaction: \n" );
- append_error ( mysql_error(connection) );
- report_error();
- return DB_FAILED;
- }
- return DB_OK;
- }
|