public PreparedStatementTask(PreparedStatementBase stmt, bool hasResult = false) { _stmt = stmt; _hasResult = hasResult; _result = new Promise <PreparedQueryResult?>(); }
protected void AppendPreparedStatement(PreparedStatementBase stmt) { SqlElementData data = new SqlElementData(); data.Type = SQL_ELEMENT_PREPARED; data.Element.Stmt = stmt; _queries.Add(data); }
bool _Query(PreparedStatementBase stmt, ref MySqlPreparedStatement?mysqlStmt, ref IntPtr pResult, ref long pRowCount, ref int pFieldCount) { if (_mysql == default) { return(false); } var index = stmt.Index; var mStmt = GetPreparedStatement(index); Assert(mStmt != null); // Can only be null if preparation failed, server side error or bad query mStmt !.BindParameters(stmt); mysqlStmt = mStmt; var msql_STMT = mStmt.STMT; MYSQL_BIND *msql_BIND = mStmt.Bind; var _s = GetMSTime(); if (mysql_stmt_bind_param(msql_STMT, msql_BIND)) { var lErrno = mysql_errno(_mysql); FEL_LOG_ERROR("sql.sql", "SQL(p): {0}\n [ERROR]: [{1}] {2}", mStmt.GetQueryString(), lErrno, mysql_stmt_error(msql_STMT)); if (_HandleMySqlErrno(lErrno)) // If it returns true, an error was handled successfully (i.e. reconnection) { return(_Query(stmt, ref mysqlStmt, ref pResult, ref pRowCount, ref pFieldCount)); // Try again } mStmt.ClearParameters(); return(false); } if (mysql_stmt_execute(msql_STMT) != 0) { var lErrno = mysql_errno(_mysql); FEL_LOG_ERROR("sql.sql", "SQL(p): {0}\n [ERROR]: [{1}] {2}", mStmt.GetQueryString(), lErrno, mysql_stmt_error(msql_STMT)); if (_HandleMySqlErrno(lErrno)) // If it returns true, an error was handled successfully (i.e. reconnection) { return(_Query(stmt, ref mysqlStmt, ref pResult, ref pRowCount, ref pFieldCount)); // Try again } mStmt.ClearParameters(); return(false); } FEL_LOG_DEBUG("sql.sql", "[{0} ms] SQL(p): {1}", GetMSTimeDiff(_s, GetMSTime()), mStmt.GetQueryString()); mStmt.ClearParameters(); pResult = mysql_stmt_result_metadata(msql_STMT); pRowCount = mysql_stmt_num_rows(msql_STMT); pFieldCount = mysql_stmt_field_count(msql_STMT); return(true); }
public bool Execute(PreparedStatementBase stmt) { if (_mysql == IntPtr.Zero) { return(false); } int index = stmt.Index; var mStmt = GetPreparedStatement(index); Assert(mStmt != null); // Can only be null if preparation failed, server side error or bad query mStmt !.BindParameters(stmt); var msql_STMT = mStmt.STMT; var msql_BIND = mStmt.Bind; var _s = GetMSTime(); if (mysql_stmt_bind_param(msql_STMT, msql_BIND)) { var lErrno = mysql_errno(_mysql); FEL_LOG_ERROR("sql.sql", "SQL(p): {0}\n [ERROR]: [{1}] {2}", mStmt.GetQueryString(), 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 } mStmt.ClearParameters(); return(false); } if (mysql_stmt_execute(msql_STMT) != 0) { var lErrno = mysql_errno(_mysql); FEL_LOG_ERROR("sql.sql", "SQL(p): {0}\n [ERROR]: [{1}] {2}", mStmt.GetQueryString(), 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 } mStmt.ClearParameters(); return(false); } FEL_LOG_DEBUG("sql.sql", "[{0} ms] SQL(p): {1}", GetMSTimeDiff(_s, GetMSTime()), mStmt.GetQueryString()); mStmt.ClearParameters(); return(true); }
public PreparedQueryResult?Query(PreparedStatementBase stmt) { MySqlPreparedStatement?mysqlStmt = null; IntPtr result = default; long rowCount = 0; int fieldCount = 0; if (!_Query(stmt, ref mysqlStmt, ref result, ref rowCount, ref fieldCount)) { return(null); } if (mysql_more_results(_mysql)) { mysql_next_result(_mysql); } return(new PreparedQueryResult(mysqlStmt !.STMT, result, rowCount, fieldCount)); }
public void BindParameters(PreparedStatementBase stmt) { _stmt = stmt; byte pos = 0; foreach (var data in stmt.Parameters) { if (pos == stmt.ParameterCount) { break; } switch (data) { case bool val: SetParameter(pos, val); break; case byte val: SetParameter(pos, val); break; case sbyte val: SetParameter(pos, val); break; case ushort val: SetParameter(pos, val); break; case short val: SetParameter(pos, val); break; case uint val: SetParameter(pos, val); break; case int val: SetParameter(pos, val); break; case ulong val: SetParameter(pos, val); break; case long val: SetParameter(pos, val); break; case float val: SetParameter(pos, val); break; case double val: SetParameter(pos, val); break; case decimal val: SetParameter(pos, val); break; case null: SetParameterNull(pos); break; case byte[] val: SetParameter(pos, val); break; case string val: SetParameter(pos, val); break; case DateTime val: SetParameter(pos, val); break; case TimeSpan val: SetParameter(pos, val); break; default: FEL_LOG_WARN("sql.sql", "[WARN] Prepared Statement (id: {0}, param pos: {1}) bound to unsupported parameter data type: {2}!", _stmt !.Index, pos, data.GetType().Name); break; } ++pos; } }