Skip to content

Commit

Permalink
Add unit tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
dim-s committed Apr 19, 2015
1 parent ffe63ad commit 406d3cf
Show file tree
Hide file tree
Showing 16 changed files with 461 additions and 7 deletions.
4 changes: 4 additions & 0 deletions jphp-sql-ext/build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@

dependencies {
compile project(':jphp-runtime')
compile 'org.apache.commons:commons-lang3:3.4'

testCompile 'org.xerial:sqlite-jdbc:3.8.7'
testCompile 'junit:junit:4.+'
testCompile project(':jphp-zend-ext')
testCompile project(':jphp-core').sourceSets.test.output
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.develnext.jphp.ext.sql.classes;

import org.develnext.jphp.ext.sql.SqlExtension;
import php.runtime.Memory;
import php.runtime.annotation.Reflection.*;
import php.runtime.env.Environment;
import php.runtime.lang.BaseObject;
Expand All @@ -9,9 +10,7 @@
import php.runtime.memory.ReferenceMemory;
import php.runtime.reflection.ClassEntity;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.*;

@Abstract
@Name("SqlConnection")
Expand All @@ -24,10 +23,16 @@ public class PSqlConnection extends BaseObject {
public static final int TRANSACTION_SERIALIZABLE = Connection.TRANSACTION_SERIALIZABLE;

protected Connection connection;
protected DatabaseMetaData metaData;

public PSqlConnection(Environment env, Connection connection) {
super(env);
this.connection = connection;
try {
this.metaData = connection.getMetaData();
} catch (SQLException e) {
throw new WrapSqlException(env, e);
}
}

public PSqlConnection(Environment env, ClassEntity clazz) {
Expand Down Expand Up @@ -74,6 +79,79 @@ public String getCatalog() throws SQLException {
return connection.getCatalog();
}

@Signature
public Memory getCatalogs(Environment env) throws SQLException {
ResultSet catalogs = metaData.getCatalogs();
ArrayMemory r = new ArrayMemory();

while (catalogs.next()) {
r.add(new PSqlResult(env, catalogs).toArray(env));
}

return r.toConstant();
}

@Signature
public Memory getSchemas(Environment env) throws SQLException {
ResultSet schemas = metaData.getSchemas();
ArrayMemory r = new ArrayMemory();

while (schemas.next()) {
r.add(new PSqlResult(env, schemas).toArray(env));
}

return r.toConstant();
}

@Signature
public Memory getMetaData() throws SQLException {
ArrayMemory r = new ArrayMemory();
r.refOfIndex("userName").assign(metaData.getUserName());

r.refOfIndex("driverName").assign(metaData.getDriverName());
r.refOfIndex("driverVersion").assign(metaData.getDriverVersion());
r.refOfIndex("databaseName").assign(metaData.getDatabaseProductName());
r.refOfIndex("databaseVersion").assign(metaData.getDatabaseProductVersion());

r.refOfIndex("catalogSeparator").assign(metaData.getCatalogSeparator());
r.refOfIndex("catalogTerm").assign(metaData.getCatalogTerm());
r.refOfIndex("schemaTerm").assign(metaData.getSchemaTerm());
r.refOfIndex("procedureTerm").assign(metaData.getProcedureTerm());
r.refOfIndex("searchStringEscape").assign(metaData.getSearchStringEscape());

r.refOfIndex("numericFunctions").assign(metaData.getNumericFunctions());
r.refOfIndex("stringFunctions").assign(metaData.getStringFunctions());
r.refOfIndex("timeDateFunctions").assign(metaData.getTimeDateFunctions());
r.refOfIndex("systemFunctions").assign(metaData.getSystemFunctions());

r.refOfIndex("defaultTransactionIsolation").assign(metaData.getDefaultTransactionIsolation());
r.refOfIndex("identifierQuoteString").assign(metaData.getIdentifierQuoteString());

r.refOfIndex("maxBinaryLiteralLength").assign(metaData.getMaxBinaryLiteralLength());
r.refOfIndex("maxCatalogNameLength").assign(metaData.getMaxCatalogNameLength());
r.refOfIndex("maxCharLiteralLength").assign(metaData.getMaxCharLiteralLength());
r.refOfIndex("maxConnections").assign(metaData.getMaxConnections());

r.refOfIndex("maxColumnNameLength").assign(metaData.getMaxColumnNameLength());
r.refOfIndex("maxColumnsInGroupBy").assign(metaData.getMaxColumnsInGroupBy());
r.refOfIndex("maxColumnsInIndex").assign(metaData.getMaxColumnsInIndex());
r.refOfIndex("maxColumnsInOrderBy").assign(metaData.getMaxColumnsInOrderBy());
r.refOfIndex("maxColumnsInSelect").assign(metaData.getMaxColumnsInSelect());
r.refOfIndex("maxColumnsInTable").assign(metaData.getMaxColumnsInTable());

r.refOfIndex("maxCursorNameLength").assign(metaData.getMaxCursorNameLength());
r.refOfIndex("maxIndexLength").assign(metaData.getMaxIndexLength());
r.refOfIndex("maxProcedureNameLength").assign(metaData.getMaxProcedureNameLength());
r.refOfIndex("maxRowSize").assign(metaData.getMaxRowSize());
r.refOfIndex("maxSchemaNameLength").assign(metaData.getMaxSchemaNameLength());
r.refOfIndex("maxStatementLength").assign(metaData.getMaxStatementLength());

r.refOfIndex("maxTableNameLength").assign(metaData.getMaxTableNameLength());
r.refOfIndex("maxTablesInSelect").assign(metaData.getMaxTablesInSelect());

return r.toConstant();
}

@Signature
public PSqlStatement query(Environment env, String sql) throws Throwable {
return query(env, sql, null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,12 @@ public Memory getTyped(Environment env, int index) throws SQLException {
case Types.BLOB:
case Types.CLOB:
case Types.NCLOB:
Blob blob = set.getBlob(index);
return ObjectMemory.valueOf(new MiscStream(env, blob.getBinaryStream()));
try {
Blob blob = set.getBlob(index);
return ObjectMemory.valueOf(new MiscStream(env, blob.getBinaryStream()));
} catch (SQLException e) {
return new BinaryMemory(set.getBytes(index));
}

default:
return StringMemory.valueOf(set.getString(index));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import php.runtime.lang.BaseObject;
import php.runtime.lang.ForeachIterator;
import php.runtime.lang.spl.iterator.Iterator;
import php.runtime.memory.BinaryMemory;
import php.runtime.memory.LongMemory;
import php.runtime.memory.ObjectMemory;
import php.runtime.reflection.ClassEntity;
Expand Down Expand Up @@ -110,11 +111,28 @@ public void bind(Environment env, int index, Memory value) throws SQLException {
statement.setDate(index + 1, new Date(time.getDate().getTime()), time.getCalendar());
} else if (value.instanceOf(Stream.class)) {
statement.setBlob(index + 1, Stream.getInputStream(env, value));
} else if (value.toValue() instanceof BinaryMemory) {
statement.setBytes(index + 1, value.getBinaryBytes());
} else {
if (value.isNull()) {
statement.setNull(index + 1, Types.NULL);
} else {
statement.setString(index + 1, value.toString());
switch (value.getRealType()) {
case INT:
statement.setLong(index + 1, value.toLong());
break;

case DOUBLE:
statement.setDouble(index + 1, value.toDouble());
break;

case BOOL:
statement.setBoolean(index + 1, value.toBoolean());
break;

default:
statement.setString(index + 1, value.toString());
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,4 +86,25 @@ public function rollback()
public function close()
{
}

/**
* @return array
*/
public function getCatalogs()
{
}

/**
* @return array
*/
public function getSchemas()
{
}

/**
* @return array
*/
public function getMetaData()
{
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public function fetch()
}

/**
* @return bool
* @return int
* @throws SqlException
*/
public function update()
Expand Down
26 changes: 26 additions & 0 deletions jphp-sql-ext/src/main/tests/resources/sql/SqlDriverManager_001.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
--TEST--
SqlDriverManager test connection #1
--FILE--
<?php

use php\sql\SqlDriverManager;

SqlDriverManager::install('sqlite');

$conn = SqlDriverManager::getConnection('sqlite::memory:');

var_dump("readonly", $conn->readOnly);
var_dump("catalog", $conn->catalog);
var_dump("autoCommit", $conn->autoCommit);
var_dump("transactionIsolation", $conn->transactionIsolation);

?>
--EXPECTF--
string(8) "readonly"
bool(false)
string(7) "catalog"
NULL
string(10) "autoCommit"
bool(true)
string(20) "transactionIsolation"
int(8)
17 changes: 17 additions & 0 deletions jphp-sql-ext/src/main/tests/resources/sql/SqlDriverManager_002.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
--TEST--
SqlDriverManager test install invalid #2
--FILE--
<?php

use php\sql\SqlDriverManager;
use php\sql\SqlException;

try {
SqlDriverManager::install('foobar');
} catch (SqlException $e) {
echo $e->getMessage();
}

?>
--EXPECT--
java.sql.SQLException: Driver class 'foobar' is not found in classpath
22 changes: 22 additions & 0 deletions jphp-sql-ext/src/main/tests/resources/sql/complex_001.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
--TEST--
Test create table #1
--FILE--
<?php
use php\sql\SqlDriverManager;
SqlDriverManager::install('sqlite');

$conn = SqlDriverManager::getConnection('sqlite::memory:');

$statement = $conn->query('create table person (id integer, name string)');
var_dump($statement->update());

$result = $conn->query('select COUNT(*) from person')->fetch();
var_dump($result->toArray());

?>
--EXPECTF--
int(0)
array(1) {
["COUNT(*)"]=>
int(0)
}
42 changes: 42 additions & 0 deletions jphp-sql-ext/src/main/tests/resources/sql/complex_002.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
--TEST--
SqlDriverManager test insert into table #2
--FILE--
<?php
use php\sql\SqlDriverManager;
use php\sql\SqlResult;
use php\util\Flow;

SqlDriverManager::install('sqlite');

$conn = SqlDriverManager::getConnection('sqlite::memory:');

$conn->query('create table person (id integer, name string)')->update();
$result = $conn->query("insert into person values(?, ?)", [1, 'leo'])->update();
$result += $conn->query("insert into person values(?, ?)", [2, 'yui'])->update();

var_dump($result);

$array = Flow::of($conn->query('select * from person'))
->map(function (SqlResult $result) { return $result->toArray(); })
->toArray();
var_dump($array);

?>
--EXPECTF--
int(2)
array(2) {
[0]=>
array(2) {
["id"]=>
int(1)
["name"]=>
string(3) "leo"
}
[1]=>
array(2) {
["id"]=>
int(2)
["name"]=>
string(3) "yui"
}
}
32 changes: 32 additions & 0 deletions jphp-sql-ext/src/main/tests/resources/sql/complex_003.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
--TEST--
SqlDriverManager test transactions #2
--FILE--
<?php
use php\sql\SqlDriverManager;
use php\sql\SqlResult;
use php\util\Flow;

SqlDriverManager::install('sqlite');

$conn = SqlDriverManager::getConnection('sqlite::memory:');

$conn->autoCommit = false;

$conn->query('create table person (id integer)')->update();
$conn->commit();

$count = $conn->query('insert into person values(?)', [1])->update();

var_dump($count);

$conn->rollback();

var_dump($conn->query('select COUNT(*) from person')->fetch()->toArray(false));

?>
--EXPECTF--
int(1)
array(1) {
[0]=>
int(0)
}
27 changes: 27 additions & 0 deletions jphp-sql-ext/src/main/tests/resources/sql/complex_004.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
--TEST--
SqlDriverManager test blobs #2
--FILE--
<?php
use php\sql\SqlDriverManager;

SqlDriverManager::install('sqlite');

$conn = SqlDriverManager::getConnection('sqlite::memory:');

$conn->query('create table person (id integer, file blob)')->update();

$count = $conn->query('insert into person values(?, ?)', [1, 'foobar'])->update();

var_dump($count);

var_dump($conn->query('select * from person')->fetch()->toArray());

?>
--EXPECT--
int(1)
array(2) {
["id"]=>
int(1)
["file"]=>
string(6) "foobar"
}
Loading

0 comments on commit 406d3cf

Please sign in to comment.