require_once("${G_base}Obj/dbase_base.phh");
$escsql_from = array( "\\", "'" );
-$escsql_to = array( "\\\\", "\\'" );
+$escsql_to = array( "\\\\", "''" );
function escsql($s)
{
static function destroy()
{
if (DBConn::$dbcnnx != FALSE) {
+ $ret = pg_close(DBConn::$dbcnnx);
DBConn::$dbcnnx = FALSE;
- return (pg_close(DBConn::$dbcnnx));
+ return ($ret);
}
return TRUE;
}
function query($sql)
{
- if (($res = pg_query($this->dbconn->db(), $sql)) == FALSE) {
+ if (!$this->dbconn)
+ if (($this->dbconn = DBConn::recover()) == FALSE)
+ return FALSE;
+
+ if (($res = @pg_query($this->dbconn->db(), $sql)) == FALSE) {
+ error_log('pg_result_status: ' . pg_result_status($res));
+ error_log('pg_connection_status: ' . pg_connection_status($this->dbconn->db()));
// try to recover the connection
if (($this->dbconn = DBConn::recover()) == FALSE)
return FALSE;
- return (pg_query($this->dbconn->db(), $sql));
+ return (@pg_query($this->dbconn->db(), $sql));
}
return ($res);
/* check the existence of the nick in the BriskDB */
log_main("login_exists: ".$login);
- $user_sql = sprintf("SELECT * FROM %susers WHERE login = lower('%s')",
+ $user_sql = sprintf("SELECT * FROM %susers WHERE login = '%s'",
$G_dbpfx, escsql($login));
if (($user_pg = $this->query($user_sql)) != FALSE)
if (pg_numrows($user_pg) == 1)
$user_sql = sprintf("UPDATE %susers SET (type, supp_comp) = (%d, '%s') WHERE code = %d;",
$G_dbpfx, $flags, escsql($supp_comp), $code);
- fprintf(STDERR, "REQUEST [%s]\n", $user_sql);
if ( ! (($user_pg = $this->query($user_sql)) != FALSE && pg_affected_rows($user_pg) == 1) ) {
return FALSE;
}
- fprintf(STDERR, "REQUEST GOOD [%s]\n", $user_sql);
return TRUE;
}
$user_sql = sprintf("UPDATE %susers SET (type, disa_reas) = (%d, %d) WHERE code = %d;",
$G_dbpfx, $flags, $disa_reas, $code);
- fprintf(STDERR, "REQUEST [%s]\n", $user_sql);
if ( ! (($user_pg = $this->query($user_sql)) != FALSE && pg_affected_rows($user_pg) == 1) ) {
return FALSE;
}
- fprintf(STDERR, "REQUEST GOOD [%s]\n", $user_sql);
return TRUE;
}
$user_sql = sprintf("UPDATE %susers SET (tos_vers) = ('%s') WHERE code = %d;",
$G_dbpfx, escsql($tos_vers), $code);
- fprintf(STDERR, "REQUEST [%s]\n", $user_sql);
if ( ! (($user_pg = $this->query($user_sql)) != FALSE && pg_affected_rows($user_pg) == 1) ) {
return FALSE;
}
- fprintf(STDERR, "REQUEST GOOD [%s]\n", $user_sql);
return TRUE;
}
if ($i < $n)
break;
- // FIXME: uncomment when counters are updated
- if (0 == 1) {
- $cnt_sql = sprintf("UPDATE %susers SET (match_cnt, game_cnt)
+ $cnt_sql = sprintf("UPDATE %susers SET (match_cnt, game_cnt)
= (match_cnt+1, game_cnt+1) WHERE %s;",
- $G_dbpfx, $codes_where);
- error_log($cnt_sql);
- if (($cnt_pg = $this->query($cnt_sql)) == FALSE || pg_affected_rows($cnt_pg) != $n) {
- log_crit(sprintf("bin5_points_save: failed increment match and game [%s]", $cnt_sql));
- break;
- }
+ $G_dbpfx, $codes_where);
+ error_log($cnt_sql);
+ if (($cnt_pg = $this->query($cnt_sql)) == FALSE || pg_affected_rows($cnt_pg) != $n) {
+ log_crit(sprintf("bin5_points_save: failed increment match and game [%s]", $cnt_sql));
+ break;
}
}
else {
$mtc_obj = pg_fetch_object($mtc_pg,0);
- // FIXME: uncomment when counters are updated
- if (0 == 1) {
- for ($i = 0 ; $i < $n ; $i++) {
- $codes_where .= sprintf("%scode = %d", ($i == 0 ? "" : " OR "), $ucodes[$i]);
- }
- $cnt_sql = sprintf("UPDATE %susers SET (game_cnt)
+ for ($i = 0 ; $i < $n ; $i++) {
+ $codes_where .= sprintf("%scode = %d", ($i == 0 ? "" : " OR "), $ucodes[$i]);
+ }
+ $cnt_sql = sprintf("UPDATE %susers SET (game_cnt)
= (game_cnt+1) WHERE %s;",
- $G_dbpfx, $codes_where);
- error_log($cnt_sql);
- if (($cnt_pg = $this->query($cnt_sql)) == FALSE || pg_affected_rows($cnt_pg) != $n) {
- log_crit(sprintf("bin5_points_save: failed increment game [%s]", $cnt_sql));
- break;
- }
+ $G_dbpfx, $codes_where);
+ error_log($cnt_sql);
+ if (($cnt_pg = $this->query($cnt_sql)) == FALSE || pg_affected_rows($cnt_pg) != $n) {
+ log_crit(sprintf("bin5_points_save: failed increment game [%s]", $cnt_sql));
+ break;
}
}
return (TRUE);
}
+ function usersnet_bycode($owner, $target)
+ {
+ GLOBAL $G_dbpfx;
+ $ret = FALSE;
+
+ $net_sql = sprintf("SELECT * FROM %susersnet WHERE owner = %d AND target = %d;",
+ $G_dbpfx, $owner, $target);
+ if (($net_pg = $this->query($net_sql)) == FALSE) {
+ return FALSE;
+ }
+ if (pg_numrows($net_pg) != 1)
+ return FALSE;
+
+ $net_obj = pg_fetch_object($net_pg, 0);
+
+ return (UsersNetItem::UsersNetItemFromRecord($net_obj));
+ }
+ function usersnet_default($owner, $target)
+ {
+ return (UsersNetItem::UsersNetItemDefaults($owner, $target));
+ }
+ function usersnet_save($owner_id, $json)
+ {
+ GLOBAL $G_dbpfx;
+ $ret = 99999;
+ $trans = FALSE;
+
+ do {
+ $friend = usersnet_friend_getid($json->friend);
+
+ $json->skill = intval($json->skill);
+ $json->trust = intval($json->trust);
+
+ if ($json->skill < 1 || $json->skill > 5 ||
+ $json->trust < 1 || $json->trust > 5 ||
+ $friend == FALSE) {
+ $ret = 1;
+ break;
+ }
+ $this->transaction('BEGIN');
+ $trans = TRUE;
+
+ // try to update
+ $net_sql = sprintf("
+ UPDATE %susersnet SET (friend, skill, trust, mtime) =
+ (%d, %d, %d, now())
+ FROM %susers as us
+ WHERE owner = %d AND us.login = '%s' AND target = us.code RETURNING *;",
+ $G_dbpfx,
+ $friend, $json->skill, $json->trust,
+ $G_dbpfx,
+ $owner_id, escsql($json->login));
+ if (($net_pg = $this->query($net_sql)) == FALSE || pg_numrows($net_pg) == 0) {
+ $net_sql = sprintf("
+ INSERT INTO %susersnet SELECT %d AS owner, us.code as target,
+ %d as friend, %d as skill, %d as trust
+ FROM %susers as us WHERE us.login = '%s' RETURNING *;",
+ $G_dbpfx, $owner_id,
+ $friend, $json->skill, $json->trust,
+ $G_dbpfx, $json->login);
+ if (($net_pg = $this->query($net_sql)) == FALSE) {
+ log_wr('insert query failed');
+ $ret = 2;
+ break;
+ }
+ if (pg_numrows($net_pg) != 1) {
+ log_wr(sprintf('insert numrow failed [%s] [%d]', $net_sql, pg_numrows($net_pg)));
+ $ret = 3;
+ break;
+ }
+ }
+ else {
+ if (pg_numrows($net_pg) != 1) {
+ log_wr('update numrow failed');
+ $ret = 4;
+ break;
+ }
+ }
+
+ $net_obj = pg_fetch_object($net_pg, 0);
+ $this->transaction('COMMIT');
+ return (0);
+ } while (0);
+
+ if ($trans)
+ $this->transaction('ROLLBACK');
+
+ return ($ret);
+ }
} // End class BriskDB
class LoginDBOld