Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PSDI Army
yii2
Commits
4ba05468
Commit
4ba05468
authored
Dec 25, 2011
by
Qiang Xue
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...
parent
a9439e90
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
201 additions
and
265 deletions
+201
-265
ColumnSchema.php
framework/db/dao/ColumnSchema.php
+1
-1
Command.php
framework/db/dao/Command.php
+4
-7
Connection.php
framework/db/dao/Connection.php
+1
-2
Query.php
framework/db/dao/Query.php
+4
-0
QueryBuilder.php
framework/db/dao/QueryBuilder.php
+2
-15
Schema.php
framework/db/dao/Schema.php
+19
-3
TableSchema.php
framework/db/dao/TableSchema.php
+0
-10
Transaction.php
framework/db/dao/Transaction.php
+1
-2
QueryBuilder.php
framework/db/dao/mysql/QueryBuilder.php
+16
-16
Schema.php
framework/db/dao/mysql/Schema.php
+6
-4
mysql.sql
tests/unit/data/mysql.sql
+6
-6
CommandTest.php
tests/unit/framework/db/dao/CommandTest.php
+141
-199
No files found.
framework/db/dao/ColumnSchema.php
View file @
4ba05468
...
...
@@ -32,7 +32,7 @@ class ColumnSchema extends \yii\base\Component
public
$allowNull
;
/**
* @var string logical type of this column. Possible logic types include:
* string, text, boolean, smallint, integer, bigint, float, decimal, datetime, timestamp, time, date, binary
* string, text, boolean, smallint, integer, bigint, float, decimal, datetime, timestamp, time, date, binary
, money
*/
public
$type
;
/**
...
...
framework/db/dao/Command.php
View file @
4ba05468
...
...
@@ -163,8 +163,7 @@ class Command extends \yii\base\Component
$sql
=
$this
->
getSql
();
try
{
$this
->
pdoStatement
=
$this
->
connection
->
pdo
->
prepare
(
$sql
);
}
catch
(
\Exception
$e
)
{
}
catch
(
\Exception
$e
)
{
\Yii
::
error
(
$e
->
getMessage
()
.
"
\n
Failed to prepare SQL:
$sql
"
,
__CLASS__
);
$errorInfo
=
$e
instanceof
\PDOException
?
$e
->
errorInfo
:
null
;
throw
new
Exception
(
$e
->
getMessage
(),
(
int
)
$e
->
getCode
(),
$errorInfo
);
...
...
@@ -289,8 +288,7 @@ class Command extends \yii\base\Component
\Yii
::
endProfile
(
__METHOD__
.
"(
$sql
)"
,
__CLASS__
);
}
return
$n
;
}
catch
(
Exception
$e
)
{
}
catch
(
\Exception
$e
)
{
if
(
$this
->
connection
->
enableProfiling
)
{
\Yii
::
endProfile
(
__METHOD__
.
"(
$sql
)"
,
__CLASS__
);
}
...
...
@@ -360,7 +358,7 @@ class Command extends \yii\base\Component
*/
public
function
queryScalar
(
$params
=
array
())
{
$result
=
$this
->
queryInternal
(
'fetchColumn'
,
$params
);
$result
=
$this
->
queryInternal
(
'fetchColumn'
,
$params
,
0
);
if
(
is_resource
(
$result
)
&&
get_resource_type
(
$result
)
===
'stream'
)
{
return
stream_get_contents
(
$result
);
}
else
{
...
...
@@ -452,8 +450,7 @@ class Command extends \yii\base\Component
}
return
$result
;
}
catch
(
Exception
$e
)
{
}
catch
(
\Exception
$e
)
{
if
(
$db
->
enableProfiling
)
{
\Yii
::
endProfile
(
__METHOD__
.
"(
$sql
)"
,
__CLASS__
);
}
...
...
framework/db/dao/Connection.php
View file @
4ba05468
...
...
@@ -61,8 +61,7 @@ use yii\db\Exception;
* $connection->createCommand($sql2)->execute();
* // ... executing other SQL statements ...
* $transaction->commit();
* }
* catch(Exception $e) {
* } catch(Exception $e) {
* $transaction->rollBack();
* }
* ~~~
...
...
framework/db/dao/Query.php
View file @
4ba05468
...
...
@@ -77,6 +77,10 @@ class Query extends \yii\base\Object
public
$union
;
/**
* @param Connection $connection
* @return string
*/
public
function
getSql
(
$connection
)
{
return
$connection
->
getQueryBuilder
()
->
build
(
$this
);
...
...
framework/db/dao/QueryBuilder.php
View file @
4ba05468
...
...
@@ -22,22 +22,9 @@ class QueryBuilder extends \yii\base\Object
{
/**
* @var array the abstract column types mapped to physical column types.
* Child classes should override this property to declare possible type mappings.
*/
public
$typeMap
=
array
(
'pk'
=>
'int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY'
,
'string'
=>
'varchar(255)'
,
'text'
=>
'text'
,
'integer'
=>
'int(11)'
,
'float'
=>
'float'
,
'decimal'
=>
'decimal'
,
'datetime'
=>
'datetime'
,
'timestamp'
=>
'timestamp'
,
'time'
=>
'time'
,
'date'
=>
'date'
,
'binary'
=>
'blob'
,
'boolean'
=>
'tinyint(1)'
,
'money'
=>
'decimal(19,4)'
,
);
public
$typeMap
=
array
();
/**
* @var Connection the database connection.
*/
...
...
framework/db/dao/Schema.php
View file @
4ba05468
...
...
@@ -4,7 +4,7 @@
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
* @copyright Copyright © 2008-201
1
Yii Software LLC
* @copyright Copyright © 2008-201
2
Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
...
...
@@ -20,6 +20,22 @@ use yii\db\Exception;
*/
abstract
class
Schema
extends
\yii\base\Object
{
const
TYPE_PK
=
'pk'
;
const
TYPE_STRING
=
'string'
;
const
TYPE_TEXT
=
'text'
;
const
TYPE_SMALLINT
=
'smallint'
;
const
TYPE_INTEGER
=
'integer'
;
const
TYPE_BIGINT
=
'bigint'
;
const
TYPE_FLOAT
=
'float'
;
const
TYPE_DECIMAL
=
'decimal'
;
const
TYPE_DATETIME
=
'datetime'
;
const
TYPE_TIMESTAMP
=
'timestamp'
;
const
TYPE_TIME
=
'time'
;
const
TYPE_DATE
=
'date'
;
const
TYPE_BINARY
=
'binary'
;
const
TYPE_BOOLEAN
=
'boolean'
;
const
TYPE_MONEY
=
'money'
;
/**
* @var \yii\db\dao\Connection the database connection
*/
...
...
@@ -38,7 +54,7 @@ abstract class Schema extends \yii\base\Object
/**
* Constructor.
* @param C
DbC
onnection $connection database connection.
* @param Connection $connection database connection.
*/
public
function
__construct
(
$connection
)
{
...
...
@@ -48,7 +64,7 @@ abstract class Schema extends \yii\base\Object
/**
* Obtains the metadata for the named table.
* @param string $name table name. The table name may contain schema name if any. Do not quote the table name.
* @return
CDb
TableSchema table metadata. Null if the named table does not exist.
* @return TableSchema table metadata. Null if the named table does not exist.
*/
public
function
getTableSchema
(
$name
)
{
...
...
framework/db/dao/TableSchema.php
View file @
4ba05468
...
...
@@ -15,16 +15,6 @@ namespace yii\db\dao;
*
* It may be extended by different DBMS driver to provide DBMS-specific table metadata.
*
* TableSchema provides the following information about a table:
* <ul>
* <li>{@link name}</li>
* <li>{@link rawName}</li>
* <li>{@link columns}</li>
* <li>{@link primaryKey}</li>
* <li>{@link foreignKeys}</li>
* <li>{@link sequenceName}</li>
* </ul>
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0
*/
...
...
framework/db/dao/Transaction.php
View file @
4ba05468
...
...
@@ -27,8 +27,7 @@ use yii\db\Exception;
* $connection->createCommand($sql2)->execute();
* //.... other SQL executions
* $transaction->commit();
* }
* catch(Exception $e) {
* } catch(Exception $e) {
* $transaction->rollBack();
* }
* ~~~
...
...
framework/db/dao/mysql/QueryBuilder.php
View file @
4ba05468
...
...
@@ -21,22 +21,22 @@ class QueryBuilder extends \yii\db\dao\QueryBuilder
/**
* @var array the abstract column types mapped to physical column types.
*/
public
$
columnTypes
=
array
(
'pk'
=>
'int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY'
,
'string'
=>
'varchar(255)'
,
'text'
=>
'text'
,
'smallint'
=>
'smallint
'
,
'integer'
=>
'int(11)'
,
'bigint'
=>
'bigint
'
,
'boolean'
=>
'tinyint(1)
'
,
'float'
=>
'float
'
,
'decimal'
=>
'decimal
'
,
'money'
=>
'decimal(19,4)
'
,
'datetime'
=>
'date
time'
,
'timestamp'
=>
'timestamp
'
,
'time'
=>
'time
'
,
'date'
=>
'date
'
,
'binary'
=>
'blob
'
,
public
$
typeMap
=
array
(
Schema
::
TYPE_PK
=>
'int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY'
,
Schema
::
TYPE_STRING
=>
'varchar(255)'
,
Schema
::
TYPE_TEXT
=>
'text'
,
Schema
::
TYPE_SMALLINT
=>
'smallint(6)
'
,
Schema
::
TYPE_INTEGER
=>
'int(11)'
,
Schema
::
TYPE_BIGINT
=>
'bigint(20)
'
,
Schema
::
TYPE_FLOAT
=>
'float
'
,
Schema
::
TYPE_DECIMAL
=>
'decimal
'
,
Schema
::
TYPE_DATETIME
=>
'datetime
'
,
Schema
::
TYPE_TIMESTAMP
=>
'timestamp
'
,
Schema
::
TYPE_TIME
=>
'
time'
,
Schema
::
TYPE_DATE
=>
'date
'
,
Schema
::
TYPE_BINARY
=>
'blob
'
,
Schema
::
TYPE_BOOLEAN
=>
'tinyint(1)
'
,
Schema
::
TYPE_MONEY
=>
'decimal(19,4)
'
,
);
/**
...
...
framework/db/dao/mysql/Schema.php
View file @
4ba05468
...
...
@@ -10,6 +10,8 @@
namespace
yii\db\dao\mysql
;
use
yii\db\dao\TableSchema
;
/**
* Schema is the class for retrieving metadata information from a MySQL database (version 4.1.x and 5.x).
*
...
...
@@ -43,7 +45,7 @@ class Schema extends \yii\db\dao\Schema
/**
* Loads the metadata for the specified table.
* @param string $name table name
* @return TableSchema driver dependent table metadata. Null if the table does not exist.
* @return
\yii\db\dao\
TableSchema driver dependent table metadata. Null if the table does not exist.
*/
protected
function
loadTableSchema
(
$name
)
{
...
...
@@ -58,7 +60,7 @@ class Schema extends \yii\db\dao\Schema
/**
* Generates various kinds of table names.
* @param
CMysql
TableSchema $table the table instance
* @param
\yii\db\dao\
TableSchema $table the table instance
* @param string $name the unquoted table name
*/
protected
function
resolveTableNames
(
$table
,
$name
)
...
...
@@ -96,7 +98,7 @@ class Schema extends \yii\db\dao\Schema
/**
* Collects the table column metadata.
* @param
CMysql
TableSchema $table the table metadata
* @param
\yii\db\dao\
TableSchema $table the table metadata
* @return boolean whether the table exists in the database
*/
protected
function
findColumns
(
$table
)
...
...
@@ -128,7 +130,7 @@ class Schema extends \yii\db\dao\Schema
/**
* Collects the foreign key column details for the given table.
* @param
CMysql
TableSchema $table the table metadata
* @param
\yii\db\dao\
TableSchema $table the table metadata
*/
protected
function
findConstraints
(
$table
)
{
...
...
tests/unit/data/mysql.sql
View file @
4ba05468
...
...
@@ -43,18 +43,18 @@ CREATE TABLE yii_post
(
id
INTEGER
NOT
NULL
PRIMARY
KEY
AUTO_INCREMENT
,
title
VARCHAR
(
128
)
NOT
NULL
,
create_time
TIMESTAMP
NOT
NULL
,
create_time
INTEGER
NOT
NULL
,
author_id
INTEGER
NOT
NULL
,
content
TEXT
,
CONSTRAINT
FK_post_author
FOREIGN
KEY
(
author_id
)
REFERENCES
yii_user
(
id
)
ON
DELETE
CASCADE
ON
UPDATE
RESTRICT
)
TYPE
=
INNODB
;
INSERT
INTO
yii_post
(
title
,
create_time
,
author_id
,
content
)
VALUES
(
'post 1'
,
'
2000-01-01
'
,
1
,
'content 1'
);
INSERT
INTO
yii_post
(
title
,
create_time
,
author_id
,
content
)
VALUES
(
'post 2'
,
'
2000-01-02
'
,
2
,
'content 2'
);
INSERT
INTO
yii_post
(
title
,
create_time
,
author_id
,
content
)
VALUES
(
'post 3'
,
'
2000-01-03
'
,
2
,
'content 3'
);
INSERT
INTO
yii_post
(
title
,
create_time
,
author_id
,
content
)
VALUES
(
'post 4'
,
'
2000-01-0
4'
,
2
,
'content 4'
);
INSERT
INTO
yii_post
(
title
,
create_time
,
author_id
,
content
)
VALUES
(
'post 5'
,
'
2000-01-05
'
,
3
,
'content 5'
);
INSERT
INTO
yii_post
(
title
,
create_time
,
author_id
,
content
)
VALUES
(
'post 1'
,
'
1324854194
'
,
1
,
'content 1'
);
INSERT
INTO
yii_post
(
title
,
create_time
,
author_id
,
content
)
VALUES
(
'post 2'
,
'
1324855194
'
,
2
,
'content 2'
);
INSERT
INTO
yii_post
(
title
,
create_time
,
author_id
,
content
)
VALUES
(
'post 3'
,
'
1324856194
'
,
2
,
'content 3'
);
INSERT
INTO
yii_post
(
title
,
create_time
,
author_id
,
content
)
VALUES
(
'post 4'
,
'
132485719
4'
,
2
,
'content 4'
);
INSERT
INTO
yii_post
(
title
,
create_time
,
author_id
,
content
)
VALUES
(
'post 5'
,
'
1324858194
'
,
3
,
'content 5'
);
CREATE
TABLE
yii_comment
(
...
...
tests/unit/framework/db/dao/CommandTest.php
View file @
4ba05468
...
...
@@ -5,6 +5,7 @@ namespace yiiunit\framework\db\dao;
use
yii\db\dao\Connection
;
use
yii\db\dao\Command
;
use
yii\db\dao\Query
;
use
yii\db\dao\DataReader
;
class
CommandTest
extends
\yiiunit\MysqlTestCase
{
...
...
@@ -15,7 +16,7 @@ class CommandTest extends \yiiunit\MysqlTestCase
$command
=
$db
->
createCommand
();
$this
->
assertEquals
(
"SELECT *
\n
FROM "
,
$command
->
sql
);
$sql
=
'SELECT * FROM posts
'
;
$sql
=
'SELECT * FROM yii_post
'
;
$command
=
$db
->
createCommand
(
$sql
);
$this
->
assertEquals
(
$sql
,
$command
->
sql
);
...
...
@@ -23,7 +24,7 @@ class CommandTest extends \yiiunit\MysqlTestCase
$command
=
$db
->
createCommand
(
$query
);
$this
->
assertEquals
(
$query
,
$command
->
query
);
$query
=
array
(
'select'
=>
'id'
,
'from'
=>
'posts
'
);
$query
=
array
(
'select'
=>
'id'
,
'from'
=>
'yii_post
'
);
$command
=
$db
->
createCommand
(
$query
);
$this
->
assertEquals
(
$query
,
$command
->
query
->
toArray
());
}
...
...
@@ -44,248 +45,190 @@ class CommandTest extends \yiiunit\MysqlTestCase
function
testGetSetSql
()
{
$db
=
$this
->
getConnection
(
false
);
}
function
testPrepare
()
{
}
function
testBindParam
()
{
$sql
=
'SELECT * FROM yii_user'
;
$command
=
$db
->
createCommand
(
$sql
);
$this
->
assertEquals
(
$sql
,
$command
->
sql
);
$sql2
=
'SELECT * FROM yii_yii_post'
;
$command
->
sql
=
$sql2
;
$this
->
assertEquals
(
$sql2
,
$command
->
sql
);
}
function
test
BindValue
()
function
test
PrepareCancel
()
{
$db
=
$this
->
getConnection
(
false
);
$command
=
$db
->
createCommand
(
'SELECT * FROM yii_user'
);
$this
->
assertEquals
(
null
,
$command
->
pdoStatement
);
$command
->
prepare
();
$this
->
assertNotEquals
(
null
,
$command
->
pdoStatement
);
$command
->
cancel
();
$this
->
assertEquals
(
null
,
$command
->
pdoStatement
);
}
function
testExecute
()
{
$db
=
$this
->
getConnection
();
}
function
testQuery
()
{
}
function
testQueryRow
()
{
}
$sql
=
'INSERT INTO yii_comment(content,post_id,author_id) VALUES (\'test comment\', 1, 1)'
;
$command
=
$db
->
createCommand
(
$sql
);
$this
->
assertEquals
(
1
,
$command
->
execute
());
function
testQueryAll
()
{
$sql
=
'SELECT COUNT(*) FROM yii_comment WHERE content=\'test comment\''
;
$command
=
$db
->
createCommand
(
$sql
);
$this
->
assertEquals
(
1
,
$command
->
queryScalar
());
$command
=
$db
->
createCommand
(
'bad SQL'
);
$this
->
setExpectedException
(
'\yii\db\Exception'
);
$command
->
execute
();
}
function
testQuery
Column
()
function
testQuery
()
{
$db
=
$this
->
getConnection
();
}
// query
$sql
=
'SELECT * FROM yii_post'
;
$reader
=
$db
->
createCommand
(
$sql
)
->
query
();
$this
->
assertTrue
(
$reader
instanceof
DataReader
);
function
testQueryScalar
()
{
// queryAll
$rows
=
$db
->
createCommand
(
'SELECT * FROM yii_post'
)
->
queryAll
();
$this
->
assertEquals
(
5
,
count
(
$rows
));
$row
=
$rows
[
2
];
$this
->
assertEquals
(
3
,
$row
[
'id'
]);
$this
->
assertEquals
(
$row
[
'title'
],
'post 3'
);
}
$rows
=
$db
->
createCommand
(
'SELECT * FROM yii_post WHERE id=10'
)
->
queryAll
();
$this
->
assertEquals
(
array
(),
$rows
);
function
testFetchMode
()
{
}
// queryRow
$sql
=
'SELECT * FROM yii_post'
;
$row
=
$db
->
createCommand
(
$sql
)
->
queryRow
();
$this
->
assertEquals
(
1
,
$row
[
'id'
]);
$this
->
assertEquals
(
'post 1'
,
$row
[
'title'
],
'post 1'
);
/*
function testPrepare()
{
$sql='SELECT title FROM posts';
$command=$db->createCommand($sql);
$this->assertEquals($command->pdoStatement,null);
$sql
=
'SELECT * FROM yii_post'
;
$command
=
$db
->
createCommand
(
$sql
);
$command
->
prepare
();
$this->assertTrue($command->pdoStatement instanceof PDOStatement);
$this->assertEquals($command->queryScalar(),'post 1');
$row
=
$command
->
queryRow
();
$this
->
assertEquals
(
1
,
$row
[
'id'
]);
$this
->
assertEquals
(
'post 1'
,
$row
[
'title'
]);
$command->text='Bad SQL';
$this->setExpectedException('CException');
$command->prepare();
}
$sql
=
'SELECT * FROM yii_post WHERE id=10'
;
$command
=
$db
->
createCommand
(
$sql
);
$this
->
assertFalse
(
$command
->
queryRow
());
function testCancel()
{
$sql='SELECT title FROM posts';
$command=$db->createCommand($sql);
$command->prepare();
$this->assertTrue($command->pdoStatement instanceof PDOStatement);
$command->cancel();
$this->assertEquals($command->pdoStatement,null);
}
// queryColumn
$sql
=
'SELECT * FROM yii_post'
;
$column
=
$db
->
createCommand
(
$sql
)
->
queryColumn
();
$this
->
assertEquals
(
range
(
1
,
5
),
$column
);
function testExecute()
{
$sql='INSERT INTO comments(content,post_id,author_id) VALUES (\'test comment\', 1, 1)';
$command=$db->createCommand($sql);
$this->assertEquals($command->execute(),1);
$this->assertEquals($command->execute(),1);
$command=$db->createCommand('SELECT * FROM comments WHERE content=\'test comment\'');
$this->assertEquals($command->execute(),0);
$command=$db->createCommand('SELECT COUNT(*) FROM comments WHERE content=\'test comment\'');
$this->assertEquals($command->queryScalar(),2);
$command=$db->createCommand('bad SQL');
$this->setExpectedException('CException');
$command->execute();
}
$command
=
$db
->
createCommand
(
'SELECT id FROM yii_post WHERE id=10'
);
$this
->
assertEquals
(
array
(),
$command
->
queryColumn
());
function testQuery()
{
$sql='SELECT * FROM posts';
$reader=$db->createCommand($sql)->query();
$this->assertTrue($reader instanceof CDbDataReader);
// queryScalar
$sql
=
'SELECT * FROM yii_post'
;
$this
->
assertEquals
(
$db
->
createCommand
(
$sql
)
->
queryScalar
(),
1
);
$sql
='SELECT * FROM posts
';
$command
=
$db->createCommand($sql);
$sql
=
'SELECT id FROM yii_post
'
;
$command
=
$db
->
createCommand
(
$sql
);
$command
->
prepare
();
$reader=$command->query();
$this->assertTrue($reader instanceof CDbDataReader);
$this
->
assertEquals
(
1
,
$command
->
queryScalar
());
$command
=
$db
->
createCommand
(
'SELECT id FROM yii_post WHERE id=10'
);
$this
->
assertFalse
(
$command
->
queryScalar
());
$command
=
$db->createCommand('bad SQL');
$this->setExpectedException('
C
Exception');
$command
=
$db
->
createCommand
(
'bad SQL'
);
$this
->
setExpectedException
(
'
\yii\db\
Exception'
);
$command
->
query
();
}
function testBindParam()
function
testBindParam
Value
()
{
$sql='INSERT INTO posts(title,create_time,author_id) VALUES (:title, :create_time, 1)';
$command=$db->createCommand($sql);
$title='test title';
$createTime=time();
$command->bindParam(':title',$title);
$command->bindParam(':create_time',$createTime);
$command->execute();
$sql='SELECT create_time FROM posts WHERE title=:title';
$command=$db->createCommand($sql);
$command->bindParam(':title',$title);
$this->assertEquals($command->queryScalar(),$createTime);
$sql='INSERT INTO types (int_col, char_col, float_col, blob_col, numeric_col, bool_col) VALUES (:int_col, :char_col, :float_col, :blob_col, :numeric_col, :bool_col)';
$command=$db->createCommand($sql);
$intCol=123;
$charCol='abc';
$floatCol=1.23;
$blobCol="\x10\x11\x12";
$numericCol='1.23';
$boolCol=false;
$command->bindParam(':int_col',$intCol);
$command->bindParam(':char_col',$charCol);
$command->bindParam(':float_col',$floatCol);
$command->bindParam(':blob_col',$blobCol);
$command->bindParam(':numeric_col',$numericCol);
$command->bindParam(':bool_col',$boolCol);
$this->assertEquals(1,$command->execute());
$sql='SELECT * FROM types';
$row=$db->createCommand($sql)->queryRow();
$this->assertEquals($row['int_col'],$intCol);
$this->assertEquals($row['char_col'],$charCol);
$this->assertEquals($row['float_col'],$floatCol);
$this->assertEquals($row['blob_col'],$blobCol);
$this->assertEquals($row['numeric_col'],$numericCol);
}
$db
=
$this
->
getConnection
();
function testBindValue()
{
$sql='INSERT INTO comments(content,post_id,author_id) VALUES (:content, 1, 1)';
$command=$db->createCommand($sql);
$command->bindValue(':content','test comment');
// bindParam
$sql
=
'INSERT INTO yii_post(title,create_time,author_id) VALUES (:title, :create_time, 1)'
;
$command
=
$db
->
createCommand
(
$sql
);
$title
=
'test title'
;
$createTime
=
time
();
$command
->
bindParam
(
':title'
,
$title
);
$command
->
bindParam
(
':create_time'
,
$createTime
);
$command
->
execute
();
$sql='SELECT post_id FROM comments WHERE content=:content';
$command=$db->createCommand($sql);
$command->bindValue(':content','test comment');
$this->assertEquals($command->queryScalar(),1);
}
function testQueryAll()
{
$rows=$db->createCommand('SELECT * FROM posts')->queryAll();
$this->assertEquals(count($rows),5);
$row=$rows[2];
$this->assertEquals($row['id'],3);
$this->assertEquals($row['title'],'post 3');
$rows=$db->createCommand('SELECT * FROM posts WHERE id=10')->queryAll();
$this->assertEquals($rows,array());
}
function testQueryRow()
{
$sql='SELECT * FROM posts';
$row=$db->createCommand($sql)->queryRow();
$this->assertEquals($row['id'],1);
$this->assertEquals($row['title'],'post 1');
$sql='SELECT * FROM posts';
$command=$db->createCommand($sql);
$command->prepare();
$row=$command->queryRow();
$this->assertEquals($row['id'],1);
$this->assertEquals($row['title'],'post 1');
$sql='SELECT * FROM posts WHERE id=10';
$command=$db->createCommand($sql);
$this->assertFalse($command->queryRow());
$command=$db->createCommand('bad SQL');
$this->setExpectedException('CException');
$command->queryRow();
}
$sql
=
'SELECT create_time FROM yii_post WHERE title=:title'
;
$command
=
$db
->
createCommand
(
$sql
);
$command
->
bindParam
(
':title'
,
$title
);
$this
->
assertEquals
(
$createTime
,
$command
->
queryScalar
());
function testQueryColumn()
{
$sql='SELECT * FROM posts';
$column=$db->createCommand($sql)->queryColumn();
$this->assertEquals($column,range(1,5));
$sql
=
'INSERT INTO yii_type (int_col, char_col, float_col, blob_col, numeric_col, bool_col) VALUES (:int_col, :char_col, :float_col, :blob_col, :numeric_col, :bool_col)'
;
$command
=
$db
->
createCommand
(
$sql
);
$intCol
=
123
;
$charCol
=
'abc'
;
$floatCol
=
1.23
;
$blobCol
=
"
\x10\x11\x12
"
;
$numericCol
=
'1.23'
;
$boolCol
=
false
;
$command
->
bindParam
(
':int_col'
,
$intCol
);
$command
->
bindParam
(
':char_col'
,
$charCol
);
$command
->
bindParam
(
':float_col'
,
$floatCol
);
$command
->
bindParam
(
':blob_col'
,
$blobCol
);
$command
->
bindParam
(
':numeric_col'
,
$numericCol
);
$command
->
bindParam
(
':bool_col'
,
$boolCol
);
$this
->
assertEquals
(
1
,
$command
->
execute
());
$sql
=
'SELECT * FROM yii_type'
;
$row
=
$db
->
createCommand
(
$sql
)
->
queryRow
();
$this
->
assertEquals
(
$intCol
,
$row
[
'int_col'
]);
$this
->
assertEquals
(
$charCol
,
$row
[
'char_col'
]);
$this
->
assertEquals
(
$floatCol
,
$row
[
'float_col'
]);
$this
->
assertEquals
(
$blobCol
,
$row
[
'blob_col'
]);
$this
->
assertEquals
(
$numericCol
,
$row
[
'numeric_col'
]);
// bindValue
$sql
=
'INSERT INTO yii_comment(content,post_id,author_id) VALUES (:content, 1, 1)'
;
$command
=
$db
->
createCommand
(
$sql
);
$command
->
bindValue
(
':content'
,
'test comment'
);
$command
->
execute
();
$command=$db->createCommand('SELECT id FROM posts WHERE id=10');
$this->assertEquals($command->queryColumn(),array());
$sql
=
'SELECT post_id FROM yii_comment WHERE content=:content'
;
$command
=
$db
->
createCommand
(
$sql
);
$command
->
bindValue
(
':content'
,
'test comment'
);
$this
->
assertEquals
(
1
,
$command
->
queryScalar
());
$command=$db->createCommand('bad SQL');
$this->setExpectedException('CException');
$command->queryColumn();
// bind value via query or execute method
$sql
=
'INSERT INTO yii_comment(content,post_id,author_id) VALUES (:content, 1, 1)'
;
$command
=
$db
->
createCommand
(
$sql
);
$command
->
execute
(
array
(
':content'
=>
'test comment2'
));
$sql
=
'SELECT post_id FROM yii_comment WHERE content=:content'
;
$command
=
$db
->
createCommand
(
$sql
);
$this
->
assertEquals
(
1
,
$command
->
queryScalar
(
array
(
':content'
=>
'test comment2'
)));
}
function test
QueryScalar
()
function
test
FetchMode
()
{
$sql='SELECT * FROM posts';
$this->assertEquals($db->createCommand($sql)->queryScalar(),1);
$sql='SELECT id FROM posts';
$command=$db->createCommand($sql);
$command->prepare();
$this->assertEquals($command->queryScalar(),1);
$command=$db->createCommand('SELECT id FROM posts WHERE id=10');
$this->assertFalse($command->queryScalar());
$command=$db->createCommand('bad SQL');
$this->setExpectedException('CException');
$command->queryScalar();
}
$db
=
$this
->
getConnection
();
function testFetchMode(){
$sql
='SELECT * FROM posts
';
$command
=
$db->createCommand($sql);
// default: FETCH_ASSOC
$sql
=
'SELECT * FROM yii_post
'
;
$command
=
$db
->
createCommand
(
$sql
);
$result
=
$command
->
queryRow
();
$this->assertTrue(is_array($result));
$this
->
assertTrue
(
is_array
(
$result
)
&&
isset
(
$result
[
'id'
])
);
$sql='SELECT * FROM posts';
$command=$db->createCommand($sql);
$command->setFetchMode(PDO::FETCH_OBJ);
// FETCH_OBJ, customized via fetchMode property
$sql
=
'SELECT * FROM yii_post'
;
$command
=
$db
->
createCommand
(
$sql
);
$command
->
fetchMode
=
\PDO
::
FETCH_OBJ
;
$result
=
$command
->
queryRow
();
$this
->
assertTrue
(
is_object
(
$result
));
// FETCH_NUM, customized in query method
$sql
=
'SELECT * FROM yii_post'
;
$command
=
$db
->
createCommand
(
$sql
);
$result
=
$command
->
queryRow
(
array
(),
\PDO
::
FETCH_NUM
);
$this
->
assertTrue
(
is_array
(
$result
)
&&
isset
(
$result
[
0
]));
}
*/
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment