Exemplo n.º 1
0
bool CACHE_SESSION::save()
{
  bool ret = false;
  MYSQL_STMT   *stmt;
  MYSQL_BIND   bind[2];
  char *query = (char *)("UPDATE cache SET session=? WHERE session_id=?");
  char *binbuff;
  unsigned long binlen;
  int session_id = this->session_id;
  MYSQL *mysql = (MYSQL *)epublisher->get_native_conn();

	if( (stmt = mysql_stmt_init(mysql)) )
	{
		if( (mysql_stmt_prepare(stmt, query, strlen(query))) == 0 )
		{
			binlen = this->get_binsize();		// get size needed
			if(binbuff = (char *)EMALLOC(binlen))
			{
				memset(binbuff, 0, binlen);
				binlen = this->serialize_bin((long *)binbuff);		// serialize and get the real size

				memset(bind, 0, sizeof(bind));
				
				bind[0].buffer_type = MYSQL_TYPE_VAR_STRING;
				bind[0].buffer = binbuff;
				bind[0].buffer_length = binlen;
				bind[0].is_null= 0;
				bind[0].length= &binlen;

				bind[1].buffer_type= MYSQL_TYPE_LONG;
				bind[1].buffer= (char *)&session_id;
				bind[1].is_null= 0;
				bind[1].length= 0;

				if (mysql_stmt_bind_param(stmt, bind) == 0)
				{
					if (mysql_stmt_execute(stmt) == 0)
					{
						if(mysql_stmt_affected_rows(stmt) == 1)
						{
							ret = true;
						}
					}
				}
				EFREE(binbuff);
			}
		}
		mysql_stmt_close(stmt);
	}
	return(ret);
}
Exemplo n.º 2
0
bool MySqlConnection::_Query(PreparedStmt* stmt, MYSQL_RES **pResult, uint64* pRowCount, uint32* pFieldCount)
{
	if (!m_Mysql)
		return false;

	uint32 index = stmt->m_stmtIndex;
	{
		MySqlPreparedStmt* pStmt = GetPreparedStatement(index);
		pStmt->m_pPrepareStmt = stmt;     // Cross reference them for debug output
		stmt->m_pStmt = pStmt;     /// @todo Cleaner way

		stmt->bindParameters();

		MYSQL_STMT* msql_STMT = pStmt->GetMySqlStmt();
		MYSQL_BIND* msql_BIND = pStmt->GetBind();

		if (mysql_stmt_bind_param(msql_STMT, msql_BIND))
		{
			uint32 lErrno = mysql_errno(m_Mysql);
			ERROR_LOG("SQL(p): %s\n [ERROR]: [%u] %s\n", pStmt->getQueryString(m_queries[index].first).c_str(), lErrno, mysql_stmt_error(msql_STMT));

			if (_HandleMySQLErrno(lErrno))  // If it returns true, an error was handled successfully (i.e. reconnection)
				return _Query(stmt, pResult, pRowCount, pFieldCount);       // Try again

			pStmt->clearParameters();
			return false;
		}

		TRACE_LOG("Exe SQL(p): %s\n\n", pStmt->getQueryString(m_queries[index].first).c_str());
		if (mysql_stmt_execute(msql_STMT))
		{
			uint32 lErrno = mysql_errno(m_Mysql);
			ERROR_LOG("SQL(p): %s\n [ERROR]: [%u] %s\n",
                      pStmt->getQueryString(m_queries[index].first).c_str(), lErrno, mysql_stmt_error(msql_STMT));

			if (_HandleMySQLErrno(lErrno))  // If it returns true, an error was handled successfully (i.e. reconnection)
				return _Query(stmt, pResult, pRowCount, pFieldCount);      // Try again

			pStmt->clearParameters();
			return false;
		}
		
		pStmt->clearParameters();

		*pResult = mysql_stmt_result_metadata(msql_STMT);
		*pRowCount = mysql_stmt_num_rows(msql_STMT);
		*pFieldCount = mysql_stmt_field_count(msql_STMT);

		return true;
	}
}
Exemplo n.º 3
0
/**
 * Insert a new row into the database.
 *
 * @param[in]   stmt            The prepared database insert statement.
 * @param[in]   station_id      The station ID.
 * @param[in]   sensor_type     The sensor type.
 * @param[in]   sensor_value    The sensor value.
 * @param[in]   age             The age of the sensor reading, in seconds.
 */
static bool
db_insert
(
    MYSQL_STMT  *stmt,
    uint8_t     station_id,
    uint8_t     sensor_type,
    int16_t     sensor_value,
    int16_t     age
)
{
    MYSQL_BIND  params[SQL_NBIND];

    memset(params, 0, sizeof(params));

    /* age */
    params[0].buffer_type = MYSQL_TYPE_SHORT;
    params[0].buffer = &age;
    params[0].buffer_length = sizeof(age);
    params[0].is_null = (my_bool *)0;
    params[0].is_unsigned = 0;

    /* station */
    params[1].buffer_type = MYSQL_TYPE_TINY;
    params[1].buffer = &station_id;
    params[1].buffer_length = sizeof(station_id);
    params[1].is_null = (my_bool *)0;
    params[1].is_unsigned = 1;

    /* sensor */
    params[2].buffer_type = MYSQL_TYPE_TINY;
    params[2].buffer = &sensor_type;
    params[2].buffer_length = sizeof(sensor_type);
    params[2].is_null = (my_bool *)0;
    params[2].is_unsigned = 1;

    /* value */
    params[3].buffer_type = MYSQL_TYPE_SHORT;
    params[3].buffer = &sensor_value;
    params[3].buffer_length = sizeof(sensor_value);
    params[3].is_null = (my_bool *)0;
    params[3].is_unsigned = 0;

    if (mysql_stmt_bind_param(stmt, params))
        return false;

    if (mysql_stmt_execute(stmt))
        return false;

    return true;
}
Exemplo n.º 4
0
void MyTblFmncRMFileMSample::updateRec(
			FmncRMFileMSample* rec
		) {
	unsigned long l[3]; my_bool n[3]; my_bool e[3];

	MYSQL_BIND bind[] = {
		bindUbigint(&rec->refFmncMFile,&(l[0]),&(n[0]),&(e[0])), 
		bindUbigint(&rec->refFmncMSample,&(l[1]),&(n[1]),&(e[1])), 
		bindUbigint(&rec->ref,&(l[2]),&(n[2]),&(e[2]))
	};

	if (mysql_stmt_bind_param(stmtUpdateRec, bind)) throw DbsException("DbsException / MySQL: error binding to statement! (TblFmncRMFileMSample / stmtUpdateRec)\n");
	if (mysql_stmt_execute(stmtUpdateRec)) throw DbsException("DbsException / MySQL: error executing statement! (TblFmncRMFileMSample / stmtUpdateRec)\n");
};
Exemplo n.º 5
0
/**
 * Bind params, give real values into prepared statement.
 * Up to two sets of parameters are provided.
 * Both of them are used in UPDATE command, params1 as colspecs and values and
 * params2 as WHERE clause. In other cases one set could be enough because values
 * or match (WHERE clause) is needed.
 * @param st MySQL command statement
 * @param params1 first set of params
 * @param params2 second set of params
 * @return 0 if OK, <0 on MySQL error, >0 on DB API error
 * @see update_params
 */
static int bind_mysql_params(MYSQL_STMT* st, db_fld_t* params1, db_fld_t* params2)
{
	int my_idx, fld_idx;
	int count1, count2;
	MYSQL_BIND* my_params;
	int err = 0;

	/* Calculate the number of parameters */
	for(count1 = 0; !DB_FLD_EMPTY(params1) && !DB_FLD_LAST(params1[count1]); count1++);
	for(count2 = 0; !DB_FLD_EMPTY(params2) && !DB_FLD_LAST(params2[count2]); count2++);
	if (st->param_count != count1 + count2) {
		BUG("mysql: Number of parameters in SQL command does not match number of DB API parameters\n");
		return 1;
	}
	
	my_params = (MYSQL_BIND*)pkg_malloc(sizeof(MYSQL_BIND) * (count1 + count2));
	if (my_params == NULL) {
		ERR("mysql: No memory left\n");
		return -1;
	}
	memset(my_params, '\0', sizeof(MYSQL_BIND) * (count1 + count2));

	/* params1 */
	my_idx = 0;
	for (fld_idx = 0; fld_idx < count1; fld_idx++, my_idx++) {
		set_field(&my_params[my_idx], params1 + fld_idx);
	}
	/* params2 */
	for (fld_idx = 0; fld_idx < count2; fld_idx++, my_idx++) {
		set_field(&my_params[my_idx], params2 + fld_idx);
	}

	err = mysql_stmt_bind_param(st, my_params);
	if (err) {
		ERR("mysql: libmysqlclient: %d, %s\n", 
			mysql_stmt_errno(st), mysql_stmt_error(st));
		goto error;
	}

	/* We do not need the array of MYSQL_BIND anymore, mysql_stmt_bind_param
	 * creates a copy in the statement and we will update it there
	 */
	pkg_free(my_params);
	return err;
   
 error:
	if (my_params) pkg_free(my_params);
	return err;
}
Exemplo n.º 6
0
void Statement::Execute() {
	if (! _db.IsConnected()) {
		throw DatabaseException("Error in Statement::Execute", 0, "----", "Database is not connected");
	}

	_numberAffectedRows = 0;
	_eof = true;
	_currentColumn = 0;

	if (ParameterCount() != _params.size()) {
		throw DatabaseException("Error in Statement::Execute", 0, "----", "Have not yet assigned all parameters");
	}

	if (mysql_stmt_bind_param(_stmt, _bind) != 0) {
		throw DatabaseException(_stmt, "Error in Statement::Execute while binding parameters");
	}

	if (mysql_stmt_execute(_stmt) != 0) {
		throw DatabaseException(_stmt, "Error in Statement::Execute while executing statement");
	}

	if (_numberResultColumns > 0) {
		if (mysql_stmt_store_result(_stmt) != 0) { 
			throw DatabaseException(_stmt, "Error in Statement::Execute while storing results");
		}
		_eof = false;
	}
	else {
		_numberAffectedRows = mysql_stmt_affected_rows(_stmt);
	}

	_resultWasStored = true;

	if (_hasBlobField && _resultBind != NULL) {
		MYSQL_RES *res = mysql_stmt_result_metadata(_stmt);
		if (res != NULL) {
			for (unsigned int i = 0; i < _resultParams.size(); i++) {
				MYSQL_FIELD *column = mysql_fetch_field_direct(res, i);
				if (_resultBind[i].buffer_type == MYSQL_TYPE_BLOB) {
					_resultParams[i]->ResizeBlob(column->max_length);
					_resultBind[i].buffer = _resultParams[i]->Buffer();
					_resultBind[i].buffer_length = _resultParams[i]->BufferSize();
					_resultBind[i].length = _resultParams[i]->BufferLength();
				}
			}
			mysql_free_result(res);
		}
	}
}
Exemplo n.º 7
0
NS_IMETHODIMP jxMySQL50Statement::Execute(PRUint32 *_retval)
{
    if (mConnection == nsnull)
    {
        SET_ERROR_RETURN (JX_MYSQL50_ERROR_NOT_CONNECTED);
    }

    if (mSTMT == nsnull)
    {
        SET_ERROR_RETURN (JX_MYSQL50_ERROR_STMT_NULL);
    }


	*_retval = 1;

    // Assume the input parameters are all inited.

	// Get access to the array of parameter values and verify its length.

	if (mysql_stmt_bind_param(mSTMT, mIn.mBIND))
	{
        //Error
		*_retval = 1;
        SET_ERROR_RETURN (JX_MYSQL50_MYSQL_ERROR);
	}

    // Bind output fields if not done already.
	if (!mOut.mBIND && mOut.mCount > 0)
    {
		nsresult rv = BindOutput();
        if (NS_FAILED(rv))
        {
			*_retval = 1;
			SET_ERROR_RETURN (rv);
		}
	}

    if (mysql_stmt_execute(mSTMT)) 
	{
        *_retval = 1;
		SET_ERROR_RETURN (JX_MYSQL50_MYSQL_ERROR);
	}

	

	*_retval = 0;

    return NS_OK;
}
bool MySQLConnection::Execute(PreparedStatement* stmt)
{
    if (!m_Mysql)
        return false;

    uint32 index = stmt->m_index;
    {
        MySQLPreparedStatement* m_mStmt = GetPreparedStatement(index);
        ASSERT(m_mStmt);            // Can only be null if preparation failed, server side error or bad query
        m_mStmt->m_stmt = stmt;     // Cross reference them for debug output
        stmt->m_stmt = m_mStmt;     // TODO: Cleaner way

        stmt->BindParameters();

        MYSQL_STMT* msql_STMT = m_mStmt->GetSTMT();
        MYSQL_BIND* msql_BIND = m_mStmt->GetBind();

        uint32 _s = getMSTime();

        if (mysql_stmt_bind_param(msql_STMT, msql_BIND))
        {
            uint32 lErrno = mysql_errno(m_Mysql);
            sLog->outError(LOG_FILTER_SQL, "SQL(p): %s\n [ERROR]: [%u] %s", m_mStmt->getQueryString(m_queries[index].first).c_str(), lErrno, mysql_stmt_error(msql_STMT));

            if (_HandleMySQLErrno(lErrno))  // If it returns true, an error was handled successfully (i.e. reconnection)
                return Execute(stmt);       // Try again

            m_mStmt->ClearParameters();
            return false;
        }

        if (mysql_stmt_execute(msql_STMT))
        {
            uint32 lErrno = mysql_errno(m_Mysql);
            sLog->outError(LOG_FILTER_SQL, "SQL(p): %s\n [ERROR]: [%u] %s", m_mStmt->getQueryString(m_queries[index].first).c_str(), lErrno, mysql_stmt_error(msql_STMT));

            if (_HandleMySQLErrno(lErrno))  // If it returns true, an error was handled successfully (i.e. reconnection)
                return Execute(stmt);       // Try again

            m_mStmt->ClearParameters();
            return false;
        }

        sLog->outDebug(LOG_FILTER_SQL, "[%u ms] SQL(p): %s", getMSTimeDiff(_s, getMSTime()), m_mStmt->getQueryString(m_queries[index].first).c_str());

        m_mStmt->ClearParameters();
        return true;
    }
}
Exemplo n.º 9
0
void MyTblFmncQPrj1NRun::updateRec(
			FmncQPrj1NRun* rec
		) {
	unsigned long l[4]; my_bool n[4]; my_bool e[4];

	MYSQL_BIND bind[] = {
		bindUbigint(&rec->jref,&(l[0]),&(n[0]),&(e[0])), 
		bindUint(&rec->jnum,&(l[1]),&(n[1]),&(e[1])), 
		bindUbigint(&rec->ref,&(l[2]),&(n[2]),&(e[2])), 
		bindUbigint(&rec->qref,&(l[3]),&(n[3]),&(e[3]))
	};

	if (mysql_stmt_bind_param(stmtUpdateRec, bind)) throw DbsException("DbsException / MySQL: error binding to statement! (TblFmncQPrj1NRun / stmtUpdateRec)\n");
	if (mysql_stmt_execute(stmtUpdateRec)) throw DbsException("DbsException / MySQL: error executing statement! (TblFmncQPrj1NRun / stmtUpdateRec)\n");
};
Exemplo n.º 10
0
void MyTblPlnrJMUserState::updateRec(
			PlnrJMUserState* rec
		) {
	unsigned long l[4]; my_bool n[4]; my_bool e[4];

	MYSQL_BIND bind[] = {
		bindUbigint(&rec->refPlnrMUser,&(l[0]),&(n[0]),&(e[0])), 
		bindUint(&rec->x1Startd,&(l[1]),&(n[1]),&(e[1])), 
		bindUint(&rec->ixVState,&(l[2]),&(n[2]),&(e[2])), 
		bindUbigint(&rec->ref,&(l[3]),&(n[3]),&(e[3]))
	};

	if (mysql_stmt_bind_param(stmtUpdateRec, bind)) throw DbsException("DbsException / MySQL: error binding to statement! (TblPlnrJMUserState / stmtUpdateRec)\n");
	if (mysql_stmt_execute(stmtUpdateRec)) throw DbsException("DbsException / MySQL: error executing statement! (TblPlnrJMUserState / stmtUpdateRec)\n");
};
Exemplo n.º 11
0
void MyTblFmncQStpRef1NFile::insertRec(
			FmncQStpRef1NFile* rec
		) {
	unsigned long l[3]; my_bool n[3]; my_bool e[3];

	MYSQL_BIND bind[] = {
		bindUbigint(&rec->jref,&(l[0]),&(n[0]),&(e[0])),
		bindUint(&rec->jnum,&(l[1]),&(n[1]),&(e[1])),
		bindUbigint(&rec->ref,&(l[2]),&(n[2]),&(e[2]))
	};

	if (mysql_stmt_bind_param(stmtInsertRec, bind)) throw DbsException("DbsException / MySQL: error binding to statement! (TblFmncQStpRef1NFile / stmtInsertRec)\n");
	if (mysql_stmt_execute(stmtInsertRec)) throw DbsException("DbsException / MySQL: error executing statement! (TblFmncQStpRef1NFile / stmtInsertRec)\n");
	rec->qref = mysql_stmt_insert_id(stmtInsertRec);
};
Exemplo n.º 12
0
bool updateStmtBind()
{
    std::unique_ptr<MYSQL, MysqlDestroy> mysql{ mysql_init(nullptr) };
    if (mysql_options(&*mysql, MYSQL_SET_CHARSET_NAME, "utf8") != 0) {
        printf("error mysql_options\n");
        return false;
    }

    if (!mysql_real_connect(&*mysql, IP.c_str(), USER.c_str(), PASSWORD.c_str(), "mytest", PORT, nullptr, 0)) {
        printf("error mysql_real_connect\n");
        return false;
    }

    std::unique_ptr<MYSQL_STMT, MysqlStmtDestroy> mysql_stmt{mysql_stmt_init(&*mysql)};
    std::string sql = "update test set fname = ?, fsid = ?, ffloat = ? where fid = 1";
    mysql_stmt_prepare(&*mysql_stmt, sql.data(), sql.size());

    std::array<MYSQL_BIND, 3> b{};
    std::memset(b.data(), 0, sizeof(b));

    const char* fname = "hhh";
    b[0].buffer_type = MYSQL_TYPE_STRING;
    b[0].buffer = (void*)fname;
    b[0].buffer_length = std::strlen(fname);

    int32_t fsid = 255;
    b[1].buffer_type = MYSQL_TYPE_TINY;
    b[1].buffer = &fsid;
    b[1].is_unsigned = 0;

    float ffloat = -1231.223;
    //b[2].buffer_type = MYSQL_TYPE_FLOAT;
    b[2].buffer_type = MYSQL_TYPE_NULL;
    b[2].buffer = &ffloat;
    /*
    my_bool is_null = 1;
    b[2].is_null = &is_null;
    */


    mysql_stmt_bind_param(&*mysql_stmt, b.data());
    auto ret = mysql_stmt_execute(&*mysql_stmt);
    if (ret != 0) {
        printf("error mysql_stmt_execute [%d] [%s]\n", ret, mysql_stmt_error(&*mysql_stmt));
        return false;
    }
    return true;
}
Exemplo n.º 13
0
int db_read_open(const char *query, MYSQL_BIND *params, MYSQL_BIND *results) {
	/* Make sure we have a valid database connection. */
	if (_mysql_con == NULL) {
		_mysql_con = mysql_init(NULL);
		if (_mysql_con == NULL) {
			finish_with_error(LOG_ERR, "Failed to initialize MySQL connection structure");
			return -1;
		}

		if (mysql_real_connect(_mysql_con, options.db.host, options.db.nss.username, options.db.nss.password, options.db.database, 0, NULL, 0) == NULL) {
			finish_with_error(LOG_ERR, "Failed to connect to MySQL");
			return -1;
		}
	}

	_mysql_stmt = mysql_stmt_init(_mysql_con);

	if (_mysql_stmt == NULL) {
		finish_with_error(LOG_ERR, "Failed to allocate MySQL prepared statement structure");
		return -1;
	}

	if (mysql_stmt_prepare(_mysql_stmt, query, strlen(query) + 1) != 0) {
		mysql_stmt_close(_mysql_stmt);
		finish_with_error(LOG_ERR, "Failed to prepare MySQL statement");
		return -1;
	}

	if (mysql_stmt_bind_param(_mysql_stmt, params) != 0) {
		mysql_stmt_close(_mysql_stmt);
		finish_with_error(LOG_ERR, "Failed to bind parameters to prepared MySQL statement");
		return -1;
	}

	if (mysql_stmt_bind_result(_mysql_stmt, results) != 0) {
		mysql_stmt_close(_mysql_stmt);
		finish_with_error(LOG_ERR, "Failed to bind results for prepared MySQL statement");
		return -1;
	}

	if (mysql_stmt_execute(_mysql_stmt) != 0) {
		mysql_stmt_close(_mysql_stmt);
		finish_with_error(LOG_ERR, "Failed to execute prepared MySQL statement");
		return -1;
	}

	return 0;
}
Exemplo n.º 14
0
/*
 * Prepares the directory check query.
 *
 * The input and results for this query are in the cur_dir_check variable.
 */
static MYSQL_STMT *
prepare_dir_query(sam_db_context_t *con) {
	MYSQL_STMT *stmt;
	char *query = "select name, ino, gen from sam_file where p_ino=? AND "
	    "p_gen=? order by ino, gen";
	MYSQL_BIND bind[2];
	MYSQL_BIND result[3];
	memset(&bind, 0, sizeof (bind));
	memset(&result, 0, sizeof (result));

	SAMDB_BIND(bind[0], cur_dir_check.p_ino, MYSQL_TYPE_LONG, TRUE);
	SAMDB_BIND(bind[1], cur_dir_check.p_gen, MYSQL_TYPE_LONG, TRUE);

	result[0].buffer = cur_dir_check.name;
	result[0].buffer_length = sizeof (cur_dir_check.name);
	result[0].length = &cur_dir_check.name_len;
	SAMDB_BIND(result[1], cur_dir_check.ino, MYSQL_TYPE_LONG, TRUE);
	SAMDB_BIND(result[2], cur_dir_check.gen, MYSQL_TYPE_LONG, TRUE);

	if ((stmt = mysql_stmt_init(con->mysql)) == NULL) {
		fprintf(stderr, "Error initializing statement: %s",
			mysql_error(con->mysql));
		return (NULL);
	}

	if (mysql_stmt_prepare(stmt, query, strlen(query)) != 0) {
		fprintf(stderr, "Error preparing statement: %s",
		    mysql_error(con->mysql));
		mysql_stmt_close(stmt);
		return (NULL);
	}

	if (mysql_stmt_bind_param(stmt, bind)) {
		fprintf(stderr, "Error binding params: (%d) %s",
		    mysql_stmt_errno(stmt), mysql_stmt_error(stmt));
		mysql_stmt_close(stmt);
		return (NULL);
	}

	if (mysql_stmt_bind_result(stmt, result)) {
		fprintf(stderr, "Error binding result: (%d) %s",
		    mysql_stmt_errno(stmt), mysql_stmt_error(stmt));
		mysql_stmt_close(stmt);
		return (NULL);
	}

	return (stmt);
}
Exemplo n.º 15
0
bool MyStatement::Execute()
{
	/* Clear any past result first! */
	m_Results = false;

	/* Bind the parameters */
	if (m_Params)
	{
		if (mysql_stmt_bind_param(m_stmt, m_bind) != 0)
		{
			return false;
		}
	}

	if (mysql_stmt_execute(m_stmt) != 0)
	{
		return false;
	}

	/* Skip away if we don't have data */
	if (!m_pRes)
	{
		return true;
	}

	/* If we don't have a result manager, create one. */
	if (!m_rs)
	{
		m_rs = new MyBoundResults(m_stmt, m_pRes);
	}

	/* Tell the result set to update its bind info,
	 * and initialize itself if necessary.
	 */
	if (!(m_Results = m_rs->Initialize()))
	{
		return false;
	}

	/* Try precaching the results. */
	m_Results = (mysql_stmt_store_result(m_stmt) == 0);

	/* Update now that the data is known. */
	m_rs->Update();

	/* Return indicator */
	return m_Results;
}
Exemplo n.º 16
0
void MyTblFmncRMFileMSample::insertRec(
			FmncRMFileMSample* rec
		) {
	unsigned long l[2]; my_bool n[2]; my_bool e[2];

	MYSQL_BIND bind[] = {
		bindUbigint(&rec->refFmncMFile,&(l[0]),&(n[0]),&(e[0])),
		bindUbigint(&rec->refFmncMSample,&(l[1]),&(n[1]),&(e[1]))
	};

	if (mysql_stmt_bind_param(stmtInsertRec, bind)) throw DbsException("DbsException / MySQL: error binding to statement! (TblFmncRMFileMSample / stmtInsertRec)\n");
// IP myInsertRec.execNounq --- BEGIN
	if (mysql_stmt_execute(stmtInsertRec)) throw DbsException("DbsException / MySQL: error executing statement! (TblFmncRMFileMSample / stmtInsertRec)\n");
	rec->ref = mysql_stmt_insert_id(stmtInsertRec);
// IP myInsertRec.execNounq --- END
};
Exemplo n.º 17
0
ResultSet_T MysqlPreparedStatement_executeQuery(T P) {
        assert(P);
        if (P->parameterCount > 0)
                if ((P->lastError = mysql_stmt_bind_param(P->stmt, P->bind)))
                        THROW(SQLException, "%s", mysql_stmt_error(P->stmt));
#if MYSQL_VERSION_ID >= 50002
        unsigned long cursor = CURSOR_TYPE_READ_ONLY;
        mysql_stmt_attr_set(P->stmt, STMT_ATTR_CURSOR_TYPE, &cursor);
#endif
        if ((P->lastError = mysql_stmt_execute(P->stmt)))
                THROW(SQLException, "%s", mysql_stmt_error(P->stmt));
        if (P->lastError == MYSQL_OK)
                return ResultSet_new(MysqlResultSet_new(P->stmt, P->maxRows, true), (Rop_T)&mysqlrops);
        THROW(SQLException, "%s", mysql_stmt_error(P->stmt));
        return NULL;
}
Exemplo n.º 18
0
void MysqlPreparedStatement_execute(T P) {
        assert(P);
        if (P->parameterCount > 0)
                if ((P->lastError = mysql_stmt_bind_param(P->stmt, P->bind)))
                        THROW(SQLException, "%s", mysql_stmt_error(P->stmt));
#if MYSQL_VERSION_ID >= 50002
        unsigned long cursor = CURSOR_TYPE_NO_CURSOR;
        mysql_stmt_attr_set(P->stmt, STMT_ATTR_CURSOR_TYPE, &cursor);
#endif
        if ((P->lastError = mysql_stmt_execute(P->stmt)))
                THROW(SQLException, "%s", mysql_stmt_error(P->stmt));
        if (P->lastError == MYSQL_OK) {
                /* Discard prepared param data in client/server */
                P->lastError = mysql_stmt_reset(P->stmt);
        }
}
Exemplo n.º 19
0
void MyTblPlnrAccRMUserUniversal::updateRec(
			PlnrAccRMUserUniversal* rec
		) {
	unsigned long l[5]; my_bool n[5]; my_bool e[5];

	MYSQL_BIND bind[] = {
		bindUbigint(&rec->refPlnrMUser,&(l[0]),&(n[0]),&(e[0])), 
		bindUint(&rec->unvIxPlnrVMaintable,&(l[1]),&(n[1]),&(e[1])), 
		bindUbigint(&rec->unvUref,&(l[2]),&(n[2]),&(e[2])), 
		bindUint(&rec->ixPlnrVAccess,&(l[3]),&(n[3]),&(e[3])), 
		bindUbigint(&rec->ref,&(l[4]),&(n[4]),&(e[4]))
	};

	if (mysql_stmt_bind_param(stmtUpdateRec, bind)) throw DbsException("DbsException / MySQL: error binding to statement! (TblPlnrAccRMUserUniversal / stmtUpdateRec)\n");
	if (mysql_stmt_execute(stmtUpdateRec)) throw DbsException("DbsException / MySQL: error executing statement! (TblPlnrAccRMUserUniversal / stmtUpdateRec)\n");
};
Exemplo n.º 20
0
static bool my_sharelog(const char *rem_host, const char *username,
			const char *our_result, const char *upstream_result,
			const char *reason, const char *solution)
{
	MYSQL *db = srv.db_cxn;
	MYSQL_STMT *stmt;
	MYSQL_BIND bind_param[6];
	unsigned long bind_lengths[6];
	bool rc = false;
	const char *step = "init";

	stmt = mysql_stmt_init(db);
	if (!stmt)
		return false;

	memset(bind_param, 0, sizeof(bind_param));
	memset(bind_lengths, 0, sizeof(bind_lengths));
	bind_instr(bind_param, bind_lengths, 0, rem_host);
	bind_instr(bind_param, bind_lengths, 1, username);
	bind_instr(bind_param, bind_lengths, 2, our_result);
	bind_instr(bind_param, bind_lengths, 3, upstream_result);
	bind_instr(bind_param, bind_lengths, 4, reason);
	bind_instr(bind_param, bind_lengths, 5, solution);

	step = "prep";
	if (mysql_stmt_prepare(stmt, srv.db_stmt_sharelog,
			       strlen(srv.db_stmt_sharelog)))
		goto err_out;

	step = "bind-param";
	if (mysql_stmt_bind_param(stmt, bind_param))
		goto err_out;

	step = "execute";
	if (mysql_stmt_execute(stmt))
		goto err_out;

	rc = true;

out:
	mysql_stmt_close(stmt);
	return rc;

err_out:
	applog(LOG_ERR, "mysql sharelog failed at %s", step);
	goto out;
}
Exemplo n.º 21
0
static int
_update_timestamp (lmt_db_t db)
{
    MYSQL_BIND param[1];
    uint64_t timestamp;
    struct timeval tv;
    int retval = -1;

    assert (db->magic == LMT_DBHANDLE_MAGIC);
    if (!db->ins_timestamp_info) {
        errno = EPERM;
        goto done;
    }
    /* N.B. Round timestamp down to nearest multiple of LMT_UPDATE_INTERVAL,
     * seconds and don't insert a new entry if <= the last timestamp inserted.
     * This keeps the number of rows in TIMESTAMP_INFO in check.
     */
    if (gettimeofday (&tv, NULL) < 0)
        goto done;
    timestamp = tv.tv_sec;
    timestamp -= (timestamp % LMT_UPDATE_INTERVAL);
    if (timestamp <= db->timestamp) {
        retval = 0;
        goto done;
    }
    memset (param, 0, sizeof (param));
    assert (mysql_stmt_param_count (db->ins_timestamp_info) == 1);
    _param_init_int (&param[0], MYSQL_TYPE_LONGLONG, &timestamp);

    if (mysql_stmt_bind_param (db->ins_timestamp_info, param)) {
        if (lmt_conf_get_db_debug ())
            msg ("error binding params for insert into %s TIMESTAMP_INFO: %s",
                lmt_db_fsname (db), mysql_error (db->conn));
        goto done;
    }
    if (mysql_stmt_execute (db->ins_timestamp_info)) {
        if (lmt_conf_get_db_debug ())
            msg ("error executing insert into %s TIMESTAMP_INFO: %s",
                 lmt_db_fsname (db), mysql_error (db->conn));
        goto done;
    }
    db->timestamp = timestamp;
    db->timestamp_id = (uint64_t)mysql_insert_id (db->conn);
    retval = 0;
done:
    return retval;
}
Exemplo n.º 22
0
void MyTblPlnrQUsgAAccess::insertRec(
			PlnrQUsgAAccess* rec
		) {
	unsigned long l[5]; my_bool n[5]; my_bool e[5];

	MYSQL_BIND bind[] = {
		bindUbigint(&rec->jref,&(l[0]),&(n[0]),&(e[0])),
		bindUint(&rec->jnum,&(l[1]),&(n[1]),&(e[1])),
		bindUbigint(&rec->ref,&(l[2]),&(n[2]),&(e[2])),
		bindUint(&rec->x1IxPlnrVCard,&(l[3]),&(n[3]),&(e[3])),
		bindUint(&rec->ixPlnrWUiaccess,&(l[4]),&(n[4]),&(e[4]))
	};

	if (mysql_stmt_bind_param(stmtInsertRec, bind)) throw DbsException("DbsException / MySQL: error binding to statement! (TblPlnrQUsgAAccess / stmtInsertRec)\n");
	if (mysql_stmt_execute(stmtInsertRec)) throw DbsException("DbsException / MySQL: error executing statement! (TblPlnrQUsgAAccess / stmtInsertRec)\n");
	rec->qref = mysql_stmt_insert_id(stmtInsertRec);
};
Exemplo n.º 23
0
void MyTblPlnrJMUserState::insertRec(
			PlnrJMUserState* rec
		) {
	unsigned long l[3]; my_bool n[3]; my_bool e[3];

	MYSQL_BIND bind[] = {
		bindUbigint(&rec->refPlnrMUser,&(l[0]),&(n[0]),&(e[0])),
		bindUint(&rec->x1Startd,&(l[1]),&(n[1]),&(e[1])),
		bindUint(&rec->ixVState,&(l[2]),&(n[2]),&(e[2]))
	};

	if (mysql_stmt_bind_param(stmtInsertRec, bind)) throw DbsException("DbsException / MySQL: error binding to statement! (TblPlnrJMUserState / stmtInsertRec)\n");
// IP myInsertRec.execNounq --- BEGIN
	if (mysql_stmt_execute(stmtInsertRec)) throw DbsException("DbsException / MySQL: error executing statement! (TblPlnrJMUserState / stmtInsertRec)\n");
	rec->ref = mysql_stmt_insert_id(stmtInsertRec);
// IP myInsertRec.execNounq --- END
};
Exemplo n.º 24
0
void MyTblPlnrQUsrMNUsergroup::updateRec(
			PlnrQUsrMNUsergroup* rec
		) {
	unsigned long l[6]; my_bool n[6]; my_bool e[6];

	MYSQL_BIND bind[] = {
		bindUbigint(&rec->jref,&(l[0]),&(n[0]),&(e[0])), 
		bindUint(&rec->jnum,&(l[1]),&(n[1]),&(e[1])), 
		bindUbigint(&rec->mref,&(l[2]),&(n[2]),&(e[2])), 
		bindUbigint(&rec->ref,&(l[3]),&(n[3]),&(e[3])), 
		bindUint(&rec->ixPlnrVUserlevel,&(l[4]),&(n[4]),&(e[4])), 
		bindUbigint(&rec->qref,&(l[5]),&(n[5]),&(e[5]))
	};

	if (mysql_stmt_bind_param(stmtUpdateRec, bind)) throw DbsException("DbsException / MySQL: error binding to statement! (TblPlnrQUsrMNUsergroup / stmtUpdateRec)\n");
	if (mysql_stmt_execute(stmtUpdateRec)) throw DbsException("DbsException / MySQL: error executing statement! (TblPlnrQUsrMNUsergroup / stmtUpdateRec)\n");
};
Exemplo n.º 25
0
int wb_dbms_query::bindQuery(void)
{
    int rc = 0;
    static const char *method = "bindQuery";

    if (m_nParam > 0) {
        rc = mysql_stmt_bind_param(m_stmt, m_param.bind);
        if (rc) error(rc, method, "mysql_stmt_bind_param");
    }

    if (m_nResult > 0) {
        rc = mysql_stmt_bind_result(m_stmt, m_result.bind);
        if (rc) error(rc, method, "mysql_stmt_bind_result");
    }

    return rc;
}
Exemplo n.º 26
0
bool MySQLConnection::Execute(PreparedStatement* stmt)
{
    if (!m_Mysql)
        return false;

    uint32 index = stmt->m_index;
    {
        // guarded block for thread-safe mySQL request
        ACE_Guard<ACE_Thread_Mutex> query_connection_guard(m_Mutex);

        MySQLPreparedStatement* m_mStmt = GetPreparedStatement(index);
        ASSERT(m_mStmt);            // Can only be null if preparation failed, server side error or bad query
        m_mStmt->m_stmt = stmt;     // Cross reference them for debug output
        stmt->m_stmt = m_mStmt;     // TODO: Cleaner way

        stmt->BindParameters();

        MYSQL_STMT* msql_STMT = m_mStmt->GetSTMT();
        MYSQL_BIND* msql_BIND = m_mStmt->GetBind();

        #ifdef SQLQUERY_LOG
        uint32 _s = getMSTime();
        #endif
        if (mysql_stmt_bind_param(msql_STMT, msql_BIND))
        {
            sLog.outSQLDriver("[ERROR]: PreparedStatement (id: %u) error binding params:  %s", index, mysql_stmt_error(msql_STMT));
            m_mStmt->ClearParameters();
            return false;
        }

        if (mysql_stmt_execute(msql_STMT))
        {
            sLog.outSQLDriver("[ERROR]: PreparedStatement (id: %u) error executing:  %s", index, mysql_stmt_error(msql_STMT));
            m_mStmt->ClearParameters();
            return false;
        }
        else
        {
            #ifdef SQLQUERY_LOG
            sLog.outSQLDriver("[%u ms] Prepared SQL: %u", getMSTimeDiff(_s, getMSTime()), index);
            #endif
            m_mStmt->ClearParameters();
            return true;
        }
    }
}
Exemplo n.º 27
0
void MyTblPlnrAccRMUserUniversal::insertRec(
			PlnrAccRMUserUniversal* rec
		) {
	unsigned long l[4]; my_bool n[4]; my_bool e[4];

	MYSQL_BIND bind[] = {
		bindUbigint(&rec->refPlnrMUser,&(l[0]),&(n[0]),&(e[0])),
		bindUint(&rec->unvIxPlnrVMaintable,&(l[1]),&(n[1]),&(e[1])),
		bindUbigint(&rec->unvUref,&(l[2]),&(n[2]),&(e[2])),
		bindUint(&rec->ixPlnrVAccess,&(l[3]),&(n[3]),&(e[3]))
	};

	if (mysql_stmt_bind_param(stmtInsertRec, bind)) throw DbsException("DbsException / MySQL: error binding to statement! (TblPlnrAccRMUserUniversal / stmtInsertRec)\n");
// IP myInsertRec.execNounq --- BEGIN
	if (mysql_stmt_execute(stmtInsertRec)) throw DbsException("DbsException / MySQL: error executing statement! (TblPlnrAccRMUserUniversal / stmtInsertRec)\n");
	rec->ref = mysql_stmt_insert_id(stmtInsertRec);
// IP myInsertRec.execNounq --- END
};
Exemplo n.º 28
0
void MyTblPlnrRMFaceMVertex::updateRec(
			PlnrRMFaceMVertex* rec
		) {
	unsigned long l[7]; my_bool n[7]; my_bool e[7];

	MYSQL_BIND bind[] = {
		bindUbigint(&rec->fceRefPlnrMFace,&(l[0]),&(n[0]),&(e[0])), 
		bindUint(&rec->fceNum,&(l[1]),&(n[1]),&(e[1])), 
		bindUbigint(&rec->refPlnrMVertex,&(l[2]),&(n[2]),&(e[2])), 
		bindUint(&rec->rteIxVTbl,&(l[3]),&(n[3]),&(e[3])), 
		bindUbigint(&rec->rteUref,&(l[4]),&(n[4]),&(e[4])), 
		bindUint(&rec->ixVDir,&(l[5]),&(n[5]),&(e[5])), 
		bindUbigint(&rec->ref,&(l[6]),&(n[6]),&(e[6]))
	};

	if (mysql_stmt_bind_param(stmtUpdateRec, bind)) throw DbsException("DbsException / MySQL: error binding to statement! (TblPlnrRMFaceMVertex / stmtUpdateRec)\n");
	if (mysql_stmt_execute(stmtUpdateRec)) throw DbsException("DbsException / MySQL: error executing statement! (TblPlnrRMFaceMVertex / stmtUpdateRec)\n");
};
Exemplo n.º 29
0
result* mysql_statement::execute()
{
  if (host_array) {
    int res = mysql_stmt_bind_param(stmt, host_array);
    if (res > 0) {
      throw_stmt_error(res, stmt, "mysql", str());
    }
  }
  int res = mysql_stmt_execute(stmt);
  if (res > 0) {
    throw_stmt_error(res, stmt, "mysql", str());
  }
  res = mysql_stmt_store_result(stmt);
  if (res > 0) {
    throw_stmt_error(res, stmt, "mysql", str());
  }
  return new mysql_prepared_result(stmt, result_size);
}
Exemplo n.º 30
0
/*==========================================
 * プリペアドステートメントの実行
 *------------------------------------------
 */
bool sqldbs_stmt_execute(struct sqldbs_stmt *st)
{
	nullpo_retr(false, st);

	if( (st->bind_params && mysql_stmt_bind_param(st->stmt, st->params)) || mysql_stmt_execute(st->stmt) )
	{
		printf("DB server Error - %s\n  %s\n\n", mysql_stmt_error(st->stmt), st->query);
		return false;
	}

	if( mysql_stmt_store_result(st->stmt) )
	{
		printf("DB server Error - %s\n  %s\n\n", mysql_stmt_error(st->stmt), st->query);
		return false;
	}

	return true;
}