diff --git a/sys/db/drivers/pgsql_sql.php b/sys/db/drivers/pgsql_sql.php
index cc5baf6..8f903fe 100644
--- a/sys/db/drivers/pgsql_sql.php
+++ b/sys/db/drivers/pgsql_sql.php
@@ -19,7 +19,50 @@ class pgSQL_SQL extends DB_SQL {
public function create_table($name, $columns, array $constraints=array(), array $indexes=array())
{
- //TODO: implement
+ $column_array = array();
+
+ // Reorganize into an array indexed with column information
+ // Eg $column_array[$colname] = array(
+ // 'type' => ...,
+ // 'constraint' => ...,
+ // 'index' => ...,
+ // )
+ foreach($columns as $colname => $type)
+ {
+ if(is_numeric($colname))
+ {
+ $colname = $type;
+ }
+
+ $column_array[$colname] = array();
+ $column_array[$colname]['type'] = ($type !== $colname) ? $type : '';
+ }
+
+ if( ! empty($constraints))
+ {
+ foreach($constraints as $col => $const)
+ {
+ $column_array[$col]['constraint'] = $const;
+ }
+ }
+
+ // Join column definitons together
+ $columns = array();
+ foreach($column_array as $n => $props)
+ {
+ $str = "{$n} ";
+ $str .= (isset($props['type'])) ? "{$props['type']} " : "";
+ $str .= (isset($props['constraint'])) ? $props['constraint'] : "";
+
+ $columns[] = $str;
+ }
+
+ // Generate the sql for the creation of the table
+ $sql = "CREATE TABLE \"{$name}\" (";
+ $sql .= implode(", ", $columns);
+ $sql .= ")";
+
+ return $sql;
}
// --------------------------------------------------------------------------
diff --git a/tests/databases/pgsql-qb.php b/tests/databases/pgsql-qb.php
index 8292756..f9fb634 100644
--- a/tests/databases/pgsql-qb.php
+++ b/tests/databases/pgsql-qb.php
@@ -15,12 +15,231 @@
class PgSQLQBTest extends UnitTestCase {
function __construct()
- {
-
- }
+ {
+ parent::__construct();
+
+ // Attempt to connect, if there is a test config file
+ if (is_file("../test_config.json"))
+ {
+ $params = json_decode(file_get_contents("../test_config.json"));
+ $params = $params->pgsql;
+ $params->type = "pgsql";
+
+ $this->db = new Query_Builder($params);
+
+ echo '
Postgres Queries
';
+
+ }
+ }
+
function TestExists()
{
$this->assertTrue(in_array('pgsql', pdo_drivers()));
}
+
+ function TestGet()
+ {
+ if (empty($this->db)) return;
+
+ $query = $this->db->get('create_test');
+
+ $this->assertIsA($query, 'PDOStatement');
+ }
+
+ function TestGetLimit()
+ {
+ if (empty($this->db)) return;
+
+ $query = $this->db->get('create_test', 2);
+
+ $this->assertIsA($query, 'PDOStatement');
+ }
+
+ function TestGetLimitSkip()
+ {
+ if (empty($this->db)) return;
+
+ $query = $this->db->get('create_test', 2, 1);
+
+ $this->assertIsA($query, 'PDOStatement');
+ }
+
+ function TestSelectWhereGet()
+ {
+ if (empty($this->db)) return;
+
+ $query = $this->db->select('id, key as k, val')
+ ->where('id >', 1)
+ ->where('id <', 900)
+ ->get('create_test', 2, 1);
+
+ $this->assertIsA($query, 'PDOStatement');
+ }
+
+ function TestSelectWhereGet2()
+ {
+ if (empty($this->db)) return;
+
+ $query = $this->db->select('id, key as k, val')
+ ->where('id !=', 1)
+ ->get('create_test', 2, 1);
+
+ $this->assertIsA($query, 'PDOStatement');
+ }
+
+ function TestSelectGet()
+ {
+ if (empty($this->db)) return;
+
+ $query = $this->db->select('id, key as k, val')
+ ->get('create_test', 2, 1);
+
+ $this->assertIsA($query, 'PDOStatement');
+ }
+
+ function TestSelectFromGet()
+ {
+ if (empty($this->db)) return;
+
+ $query = $this->db->select('id, key as k, val')
+ ->from('create_test ct')
+ ->where('id >', 1)
+ ->get();
+
+ $this->assertIsA($query, 'PDOStatement');
+ }
+
+ function TestSelectFromLimitGet()
+ {
+ if (empty($this->db)) return;
+
+ $query = $this->db->select('id, key as k, val')
+ ->from('create_test ct')
+ ->where('id >', 1)
+ ->limit(3)
+ ->get();
+
+ $this->assertIsA($query, 'PDOStatement');
+ }
+
+ function TestOrderBy()
+ {
+ if (empty($this->db)) return;
+
+ $query = $this->db->select('id, key as k, val')
+ ->from('create_test')
+ ->where('id >', 0)
+ ->where('id <', 9000)
+ ->order_by('id', 'DESC')
+ ->order_by('k', 'ASC')
+ ->limit(5,2)
+ ->get();
+
+ $this->assertIsA($query, 'PDOStatement');
+ }
+
+ function TestOrderByRandom()
+ {
+ if (empty($this->db)) return;
+
+ $query = $this->db->select('id, key as k, val')
+ ->from('create_test')
+ ->where('id >', 0)
+ ->where('id <', 9000)
+ ->order_by('id', 'rand')
+ ->limit(5,2)
+ ->get();
+
+ $this->assertIsA($query, 'PDOStatement');
+ }
+
+ function TestGroupBy()
+ {
+ if (empty($this->db)) return;
+
+ $query = $this->db->select('id, key as k, val')
+ ->from('create_test')
+ ->where('id >', 0)
+ ->where('id <', 9000)
+ ->group_by('k')
+ ->group_by('val')
+ ->order_by('id', 'DESC')
+ ->order_by('k', 'ASC')
+ ->limit(5,2)
+ ->get();
+
+ $this->assertIsA($query, 'PDOStatement');
+ }
+
+ function TestOrWhere()
+ {
+ if (empty($this->db)) return;
+
+ $query = $this->db->select('id, key as k, val')
+ ->from('create_test')
+ ->where(' id ', 1)
+ ->or_where('key >', 0)
+ ->limit(2, 1)
+ ->get();
+
+ $this->assertIsA($query, 'PDOStatement');
+ }
+
+ function TestLike()
+ {
+ if (empty($this->db)) return;
+
+ $query = $this->db->from('create_test')
+ ->like('key', 'og')
+ ->get();
+
+ $this->assertIsA($query, 'PDOStatement');
+ }
+
+ function TestJoin()
+ {
+ if (empty($this->db)) return;
+
+ $query = $this->db->from('create_test')
+ ->join('create_join cj', 'cj.id = create_test.id')
+ ->get();
+
+ $this->assertIsA($query, 'PDOStatement');
+ }
+
+ function TestInsert()
+ {
+ if (empty($this->db)) return;
+
+ $query = $this->db->set('id', 4)
+ ->set('key', 4)
+ ->set('val', 5)
+ ->insert('create_test');
+
+ $this->assertIsA($query, 'PDOStatement');
+ }
+
+ function TestUpdate()
+ {
+ if (empty($this->db)) return;
+
+ $query = $this->db->set('id', 4)
+ ->set('key', 'gogle')
+ ->set('val', 'non-word')
+ ->where('id', 4)
+ ->update('create_test');
+
+ $this->assertIsA($query, 'PDOStatement');
+ }
+
+ function TestDelete()
+ {
+ if (empty($this->db)) return;
+
+ $query = $this->db->where('id', 4)->delete('create_test');
+
+ $this->assertIsA($query, 'PDOStatement');
+ }
+
}
\ No newline at end of file
diff --git a/tests/databases/pgsql.php b/tests/databases/pgsql.php
index a528135..701e83b 100644
--- a/tests/databases/pgsql.php
+++ b/tests/databases/pgsql.php
@@ -19,19 +19,166 @@
*/
class PgTest extends UnitTestCase {
- /**
- * __construct function.
- *
- * @access public
- * @return void
- */
function __construct()
{
parent::__construct();
}
+ function setUp()
+ {
+ // Attempt to connect, if there is a test config file
+ if (is_file("../test_config.json"))
+ {
+ $params = json_decode(file_get_contents("../test_config.json"));
+ $params = $params->pgsql;
+
+ $this->db = new PgSQL("host={$params->host};port={$params->port};dbname={$params->database}", $params->user, $params->pass);
+ }
+ }
+
+ function tearDown()
+ {
+ unset($this->db);
+ }
+
function TestExists()
{
$this->assertTrue(in_array('pgsql', pdo_drivers()));
}
+
+ function TestConnection()
+ {
+ if (empty($this->db)) return;
+
+ $this->assertIsA($this->db, 'PgSQL');
+ }
+
+ function TestGetTables()
+ {
+ if (empty($this->db)) return;
+
+ $tables = $this->db->get_tables();
+
+ $this->assertTrue(is_array($tables));
+ }
+
+ function TestGetSystemTables()
+ {
+ if (empty($this->db)) return;
+
+ $tables = $this->db->get_system_tables();
+
+ $this->assertTrue(is_array($tables));
+ }
+
+ function TestCreateTransaction()
+ {
+ if (empty($this->db)) return;
+
+ $res = $this->db->beginTransaction();
+ $this->assertTrue($res);
+ }
+
+ /*function TestCreateTable()
+ {
+ if (empty($this->db)) return;
+
+ //Attempt to create the table
+ $sql = $this->db->sql->create_table('create_test',
+ array(
+ 'id' => 'integer',
+ 'key' => 'TEXT',
+ 'val' => 'TEXT',
+ ),
+ array(
+ 'id' => 'PRIMARY KEY'
+ )
+ );
+
+ $this->db->query($sql);
+
+ //Attempt to create the table
+ $sql = $this->db->sql->create_table('create_join',
+ array(
+ 'id' => 'integer',
+ 'key' => 'TEXT',
+ 'val' => 'TEXT',
+ ),
+ array(
+ 'id' => 'PRIMARY KEY'
+ )
+ );
+ $this->db->query($sql);
+
+ echo $sql.'
';
+
+ //Check
+ $dbs = $this->db->get_tables();
+
+ $this->assertTrue(in_array('create_test', $dbs));
+
+ }*/
+
+ /*function TestTruncate()
+ {
+ if (empty($this->db)) return;
+
+ $this->db->truncate('create_test');
+ $this->assertIsA($this->db->affected_rows(), 'int');
+ }*/
+
+ function TestPreparedStatements()
+ {
+ if (empty($this->db)) return;
+
+ $sql = <<db->prepare_query($sql, array(1,"boogers", "Gross"));
+
+ $statement->execute();
+
+ }
+
+ function TestPrepareExecute()
+ {
+ if (empty($this->db)) return;
+
+ $sql = <<db->prepare_execute($sql, array(
+ 2, "works", 'also?'
+ ));
+
+ }
+
+ function TestCommitTransaction()
+ {
+ if (empty($this->db)) return;
+
+ $res = $this->db->beginTransaction();
+
+ $sql = 'INSERT INTO "create_test" ("id", "key", "val") VALUES (10, 12, 14)';
+ $this->db->query($sql);
+
+ $res = $this->db->commit();
+ $this->assertTrue($res);
+ }
+
+ function TestRollbackTransaction()
+ {
+ if (empty($this->db)) return;
+
+ $res = $this->db->beginTransaction();
+
+ $sql = 'INSERT INTO "create_test" ("id", "key", "val") VALUES (182, 96, 43)';
+ $this->db->query($sql);
+
+ $res = $this->db->rollback();
+ $this->assertTrue($res);
+ }
+
}
\ No newline at end of file
diff --git a/tests/test_dbs/FB_TEST_DB.FDB b/tests/test_dbs/FB_TEST_DB.FDB
index 3af7b22..3829b02 100755
Binary files a/tests/test_dbs/FB_TEST_DB.FDB and b/tests/test_dbs/FB_TEST_DB.FDB differ