Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions core/DB/DB.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ abstract class DB
const FULL_TEXT_OR = 2;

protected $link = null;
protected $dialect = null;

protected $persistent = false;

Expand Down Expand Up @@ -62,6 +63,11 @@ abstract public function queryCount(Query $query);

// actually set's encoding
abstract public function setDbEncoding();

/**
* @return Dialect
*/
abstract protected function spawnDialect();

public function __destruct()
{
Expand All @@ -74,9 +80,10 @@ public function __destruct()
}
}

public static function getDialect()
public function getDialect()
{
throw new UnimplementedFeatureException('implement me, please');
return $this->dialect = $this->dialect
?: ($this->spawnDialect()->setDB($this));
}

/**
Expand Down
48 changes: 38 additions & 10 deletions core/DB/Dialect.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,33 +15,40 @@
* @ingroup DB
* @ingroup Module
**/
abstract class /* ANSI's */ Dialect
extends Singleton
implements Instantiatable
{
abstract class /* ANSI's */ Dialect {
const LITERAL_NULL = 'NULL';
const LITERAL_TRUE = 'TRUE';
const LITERAL_FALSE = 'FALSE';

/**
* @var DB
*/
protected $db = null;

abstract public function preAutoincrement(DBColumn $column);
abstract public function postAutoincrement(DBColumn $column);

abstract public function hasTruncate();
abstract public function hasMultipleTruncate();
abstract public function hasReturning();

abstract public function quoteValue($value);

/**
must be implemented too:
public static function quoteValue($value);
* @deprecated remove after onPHP 1.2+
* @return LiteDialect
**/
public static function me()
{
throw new UnimplementedFeatureException('Deprecated: dialects not extends Singleton now');
}

public static function quoteField($field)
public function quoteField($field)
{
return self::quoteTable($field);
return $this->quoteTable($field);
}

public static function quoteTable($table)
public function quoteTable($table)
{
return '"'.$table.'"';
}
Expand All @@ -67,6 +74,16 @@ public static function dropTableMode($cascade = false)
: ' RESTRICT';
}

/**
* @param DB $db
* @return Dialect
*/
public function setDB(DB $db)
{
$this->db = $db;
return $this;
}

public function quoteBinary($data)
{
return $this->quoteValue($data);
Expand Down Expand Up @@ -159,5 +176,16 @@ public function quoteIpInRange($range, $ip)
{
throw new UnimplementedFeatureException();
}

protected function getLink()
{
if (!$this->db)
throw new WrongStateException('Expected setted db');
if (!$this->db->isConnected()) {
$this->db->connect();
}

return $this->db->getLink();
}
}
?>
13 changes: 9 additions & 4 deletions core/DB/ImaginaryDialect.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,17 @@
**/
final class ImaginaryDialect extends Dialect
{
private static $self = null;

/**
* @return ImaginaryDialect
**/
public static function me()
{
return Singleton::getInstance(__CLASS__);
if (!self::$self) {
self::$self = new self();
}
return self::$self;
}

public function preAutoincrement(DBColumn $column)
Expand All @@ -35,17 +40,17 @@ public function postAutoincrement(DBColumn $column)
return 'AUTOINCREMENT';
}

public static function quoteValue($value)
public function quoteValue($value)
{
return $value;
}

public static function quoteField($field)
public function quoteField($field)
{
return $field;
}

public static function quoteTable($table)
public function quoteTable($table)
{
return $table;
}
Expand Down
12 changes: 2 additions & 10 deletions core/DB/LiteDialect.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,9 @@
*
* @ingroup DB
**/
final class LiteDialect extends Dialect
class LiteDialect extends Dialect implements Instantiatable
{
/**
* @return LiteDialect
**/
public static function me()
{
return Singleton::getInstance(__CLASS__);
}

public static function quoteValue($value)
public function quoteValue($value)
{
/// @see Sequenceless for this convention

Expand Down
56 changes: 56 additions & 0 deletions core/DB/LitePDODialect.class.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<?php
/***************************************************************************
* Copyright (C) 2012 by Aleksey S. Denisov *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation; either version 3 of the *
* License, or (at your option) any later version. *
* *
***************************************************************************/

/**
* SQLite dialect.
*
* @see http://www.sqlite.org/
*
* @ingroup DB
**/
class LitePDODialect extends LiteDialect
{
public function quoteValue($value)
{
/// @see Sequenceless for this convention

if ($value instanceof Identifier && !$value->isFinalized())
return 'null';

if (Assert::checkInteger($value))
return $value;

return $this->getLink()->quote($value);
}

public function quoteBinary($data)
{
//here must be PDO::PARAM_LOB, but i couldn't get success result, so used base64_encode/decode
return $this->getLink()->quote(base64_encode($data), PDO::PARAM_STR);
}

public function unquoteBinary($data)
{
try {
return base64_decode($data);
} catch (Exception $e) {
throw new UnimplementedFeatureException('Wrong encoding, if you get it, throw correct exception');
}
}

/**
* @return PDO
*/
protected function getLink() {
return parent::getLink();
}
}
?>
16 changes: 4 additions & 12 deletions core/DB/MyDialect.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,25 +21,17 @@ class MyDialect extends Dialect
{
const IN_BOOLEAN_MODE = 1;

/**
* @return MyDialect
**/
public static function me()
{
return Singleton::getInstance(__CLASS__);
}

public static function quoteValue($value)
public function quoteValue($value)
{
/// @see Sequenceless for this convention

if ($value instanceof Identifier && !$value->isFinalized())
return "''"; // instead of 'null', to be compatible with v. 4

return "'" . mysql_real_escape_string($value) . "'";
return "'" . mysql_real_escape_string($value, $this->getLink()) . "'";
}

public static function quoteField($field)
public function quoteField($field)
{
if (strpos($field, '.') !== false)
throw new WrongArgumentException();
Expand All @@ -49,7 +41,7 @@ public static function quoteField($field)
return "`{$field}`";
}

public static function quoteTable($table)
public function quoteTable($table)
{
return "`{$table}`";
}
Expand Down
12 changes: 2 additions & 10 deletions core/DB/MyImprovedDialect.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,7 @@
**/
final class MyImprovedDialect extends MyDialect
{
/**
* @return MyImprovedDialect
**/
public static function me($link = null)
{
return Singleton::getInstance(__CLASS__, $link);
}

public static function quoteValue($value)
public function quoteValue($value)
{
/// @see Sequenceless for this convention

Expand All @@ -38,7 +30,7 @@ public static function quoteValue($value)
"'"
.mysqli_real_escape_string(
// can't find better way atm.
DBPool::me()->getLink()->getLink(),
$this->getLink(),
$value
)
."'";
Expand Down
16 changes: 8 additions & 8 deletions core/DB/MySQL.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,6 @@
**/
final class MySQL extends Sequenceless
{
/**
* @return MyDialect
**/
public static function getDialect()
{
return MyDialect::me();
}

/**
* @return MySQL
**/
Expand Down Expand Up @@ -265,6 +257,14 @@ protected function getInsertId()
return mysql_insert_id($this->link);
}

/**
* @return MyDialect
**/
protected function spawnDialect()
{
return new MyDialect();
}

private function checkSingle($result)
{
if (mysql_num_rows($result) > 1)
Expand Down
16 changes: 8 additions & 8 deletions core/DB/MySQLim.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,6 @@
**/
final class MySQLim extends Sequenceless
{
/**
* @return MyImprovedDialect
**/
public static function getDialect()
{
return MyImprovedDialect::me();
}

/**
* @return MySQLim
**/
Expand Down Expand Up @@ -167,6 +159,14 @@ protected function getInsertId()
return mysqli_insert_id($this->link);
}

/**
* @return MyImprovedDialect
**/
protected function spawnDialect()
{
return new MyImprovedDialect();
}

private function checkSingle($result)
{
if (mysqli_num_rows($result) > 1)
Expand Down
16 changes: 8 additions & 8 deletions core/DB/PgSQL.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,6 @@
**/
class PgSQL extends DB
{
/**
* @return PostgresDialect
**/
public static function getDialect()
{
return PostgresDialect::me();
}

/**
* @return PgSQL
**/
Expand Down Expand Up @@ -257,6 +249,14 @@ public function getTableInfo($table)
return $table;
}

/**
* @return PostgresDialect
**/
protected function spawnDialect()
{
return new PostgresDialect();
}

private function checkSingle($result)
{
if (pg_num_rows($result) > 1)
Expand Down
Loading