示例#1
0
void mpl_tab_drv_close(MPL *mpl)
{     TABDCA *dca = mpl->dca;
      int ret;
      switch (dca->id)
      {  case TAB_CSV:
            ret = csv_close_file(dca, dca->link);
            break;
         case TAB_XBASE:
            ret = dbf_close_file(dca, dca->link);
            break;
         case TAB_ODBC:
            ret = db_iodbc_close(dca, dca->link);
            break;
         case TAB_MYSQL:
            ret = db_mysql_close(dca, dca->link);
            break;
         default:
            xassert(dca != dca);
      }
      dca->id = 0;
      dca->link = NULL;
      if (ret)
         error(mpl, "error on closing table %s",
            mpl->stmt->u.tab->name);
      return;
}
示例#2
0
void db_mysql_async_exec_task(void *param)
{
	str *p;
	db1_con_t* dbc;
	
	p = (str*)param;
	
	dbc = db_mysql_init(&p[0]);

	if(dbc==NULL) {
		LM_ERR("failed to open connection for [%.*s]\n", p[0].len, p[0].s);
		return;
	}
	if(db_mysql_submit_query(dbc, &p[1])<0) {
		LM_ERR("failed to execute query on async worker\n");
	}
	db_mysql_close(dbc);
}
示例#3
0
文件: mysql.c 项目: danopia/denora
int db_mysql_query(char *sql)
{
    int result, lcv;
    int pingresult;

    if (!denora->do_sql) {
        return 0;
    }

    alog(LOG_SQLDEBUG, "sql debug: %s", db_mysql_hidepass(sql));

    pingresult = mysql_ping(mysql);
    if (!pingresult) {
        result = mysql_query(mysql, sql);
    } else {
        result = pingresult;
    }

    if (result) {
        switch (mysql_errno(mysql)) {
        case CR_SERVER_GONE_ERROR:
        case CR_SERVER_LOST:
        case CR_CONN_HOST_ERROR:
        case CR_IPSOCK_ERROR:
        case CR_CONNECTION_ERROR:
        case CR_UNKNOWN_ERROR:
            for (lcv = 0; lcv < SqlRetries; lcv++) {
                alog(LOG_NORMAL, "%s, trying to reconnect...",
                     mysql_error(mysql));
                if (db_mysql_open()) {
                    alog(LOG_NORMAL, "MySQL connection reestablished");
                    result = mysql_query(mysql, sql);
                    return (result);
                }
                sleep(SqlRetryGap);
            }

            /* If we get here, we could not connect. */
            log_perror("Unable to reconnect to database: %s\n",
                       mysql_error(mysql));
            db_mysql_error(SQL_ERROR, "connect");
            alog(LOG_ERROR, "Disabling MYSQL due to problem with server");
            denora->do_sql = 0;
            SQLDisableDueServerLost = 1;
            /* Never reached. */
            break;
        case CR_COMMANDS_OUT_OF_SYNC:
            db_mysql_error(SQL_ERROR, "Commands out of sync");
            break;
        case ER_PARSE_ERROR:
            db_mysql_error(SQL_ERROR, "parser error");
            break;
        case ER_WRONG_VALUE_COUNT_ON_ROW:
            db_mysql_error(SQL_ERROR, "query error");
            break;
        case ER_BAD_FIELD_ERROR:
            db_mysql_error(SQL_ERROR, "Unknown field");
            break;
        case ER_NO_SUCH_TABLE:
            db_mysql_error(SQL_ERROR, "Table Doesn't exist");
            break;
        case ER_DUP_FIELDNAME:
            break;
        case ER_DUP_ENTRY:
            alog(LOG_ERROR, "MYSQL said %s", mysql_error(mysql));
            alog(LOG_ERROR, "MYSQL query %s", sql);
            break;
        case ER_BAD_NULL_ERROR:
            db_mysql_error(SQL_ERROR,
                           "Column can not be NULL!! - check statement");
            break;
        case ER_USER_LIMIT_REACHED:
            db_mysql_error(SQL_ERROR,
                           "To Many Connections, closing denora mysql connection");
            denora->do_sql = 0;
            db_mysql_close();
            SQLDisableDueServerLost = 1;
            break;
        case ER_GET_ERRNO:
            db_mysql_error(SQL_ERROR,
                           "mysql returned errno code: disabling MYSQL");
            denora->do_sql = 0;
            db_mysql_close();
            SQLDisableDueServerLost = 1;
            break;
        default:
            alog(LOG_ERROR, "MYSQL reported Error Code %d",
                 mysql_errno(mysql));
            alog(LOG_ERROR, "MYSQL said %s", mysql_error(mysql));
            alog(LOG_ERROR, "Report this to Denora Developers");
            alog(LOG_ERROR, "Disabling MYSQL due to this error");
            denora->do_sql = 0;
            db_mysql_close();
            SQLDisableDueServerLost = 1;
            return 0;
        }
    }

    return 1;

}