/********************************************************** * 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 #include #include #include #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; }