xaizek / rocketgit (License: AGPLv3+) (since 2018-12-09)
Light and fast Git hosting solution suitable to serve both as a hub or as a personal code storage with its tickets, pull requests, API and much more.
<root> / tests / sql.php (85fa435d17e9df39cede28938de64e0e7d6925a9) (3,456B) (mode 100644) [raw]
<?php
error_reporting(E_ALL | E_STRICT);
ini_set("track_errors", "On");

$rg_sql_debug = 100;

$INC = dirname(__FILE__) . "/../inc";
require_once(dirname(__FILE__) . "/config.php");
require_once($INC . "/init.inc.php");
require_once($INC . "/log.inc.php");
require_once($INC . "/sql.inc.php");

rg_log_set_file("sql.log");

require_once("common.php");


rg_log('');
rg_log_enter('db: drop \'test\' table...');
$sql = "DROP TABLE IF EXISTS test";
$res = rg_sql_query($db, $sql);
if ($res === FALSE) {
	rg_log("Cannot create table 'test' (" . rg_sql_error() . ")!");
	exit(1);
}
rg_log_exit();


rg_log('');
rg_log_enter('db: test creation of a table...');
$sql = "CREATE TABLE test (id TEXT PRIMARY KEY"
	. ", f1 TEXT DEFAULT '', f2 TEXT DEFAULT '')";
$res = rg_sql_query($db, $sql);
if ($res === FALSE) {
	rg_log("Cannot create table 'test' (" . rg_sql_error() . ")!");
	exit(1);
}
rg_log_exit();


rg_log('');
rg_log_enter('db: test insert...');
$sql = "INSERT INTO test (id) VALUES ('aaa')";
$res = rg_sql_query($db, $sql);
if ($res === FALSE) {
	rg_log("Cannot insert!");
	exit(1);
}
rg_sql_free_result($res);
rg_log_exit();


rg_log('');
rg_log_enter('db: test insert with the same key...');
// We do not want a err- file to be created
$k = md5('Internal error: INSERT INTO test (id) VALUES (\'aaa\'): ERROR:  duplicate key value violates unique constraint "test_pkey"' . "\n" . 'DETAIL:  Key (id)=(aaa) already exists. (23505)');
$rg_error_core_seen[$k] = 1;
$sql = "INSERT INTO test (id) VALUES ('aaa')";
$res = @rg_sql_query($db, $sql);
if ($res !== FALSE) {
	rg_log("I can do double insert, not good!");
	exit(1);
}
unset($rg_error_core_seen[$k]);
rg_log_exit();


rg_log('');
rg_log_enter('db: test delete...');
$sql = "DELETE FROM test WHERE id = 'aaa'";
$res = rg_sql_query($db, $sql);
if ($res === FALSE) {
	rg_log("Cannot delete!");
	exit(1);
}
rg_sql_free_result($res);
rg_log_exit();


rg_log('');
rg_log_enter('db: test prepare with named values...');
$sql = "INSERT INTO test(id, f1, f2) VALUES (@@id@@, @@f@@, @@f@@)";
$params = array("id" => "myid", "f" => "value", "junk" => "aaa");
$res = rg_sql_query_params($db, $sql, $params);
if ($res === FALSE) {
	rg_log("Cannot insert into test using @@x@@!");
	exit(1);
}
rg_sql_free_result($res);
$sql = "SELECT * FROM test WHERE id = 'myid'";
$res = rg_sql_query($db, $sql);
$row = rg_sql_fetch_array($res);
if (strcmp($row['f1'], "value") != 0) {
	rg_log("Seems that insert with @@x@@ are not working!");
	exit(1);
}
rg_sql_free_result($res);
rg_log_exit();


rg_log('');
rg_log_enter('Testing rg_sql_fields...');
$r = rg_sql_fields($db, 'test');
if (($r === FALSE) || (count($r) != 3) || !isset($r['id'])) {
	rg_log_ml('r: ' . print_r($r, TRUE));
	rg_log('We do not have correct file names!');
	exit(1);
}
rg_log_exit();


rg_log('');
rg_log_enter('Testing a unique key violation with ignore...');
$ignore = array(RG_SQL_UNIQUE_VIOLATION);
$params = array('id' => 'myid', 'f2' => 'bla');
$sql = 'INSERT INTO test VALUES (@@id@@, @@f2@@)';
$res = rg_sql_query_params_ignore($db, $sql, $params, $ignore, $ignore_kicked);
if ($res !== FALSE) {
	rg_log('res is not false!');
	exit(1);
}
if (!strstr($rg_internal_error_last, 'duplicate key value violates unique')) {
	rg_log('rg_internal_error_last does not contain something'
		. ' about duplicate key'
		. ' [' . $rg_internal_error_last . ']!');
	exit(1);
}
rg_log_exit();


// TODO: test rg_sql_last_id

rg_sql_close($db);

rg_log("OK!");
?>
Hints

Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://code.reversed.top/user/xaizek/rocketgit

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@code.reversed.top/user/xaizek/rocketgit

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a pull request:
... clone the repository ...
... make some changes and some commits ...
git push origin master