コード例 #1
0
 function toSQL()
 {
     if (count($this->data) == 0) {
         return 'FALSE';
     }
     return static::PART_NAME . '(' . \Radical\DB::A($this->data) . ')';
 }
コード例 #2
0
 function __construct()
 {
     $IP = Session::IP();
     \Radical\DB::Q('INSERT INTO session (session_ip,session_time) VALUES(' . \Radical\DB::E($IP) . ',' . time() . ') ON DUPLICATE KEY UPDATE session_time=' . time());
     $this->id = \Radical\DB::insertId();
     parent::__construct();
 }
コード例 #3
0
 function toSQL()
 {
     if ($this->sql) {
         return $this->sql;
     }
     //Build Append Part
     $append = $this->_appendPart();
     //Build Query
     $sql = 'INSERT ' . ($this->ignore === true ? 'IGNORE ' : '');
     if (isset($this->values[0]) && is_array($this->values[0])) {
         $keys = array_keys($this->values[0]);
         $values = $this->values;
     } else {
         $keys = array_keys($this->values);
         $values = array($this->values);
     }
     $sql .= 'INTO `' . $this->table . '` ';
     if (count($keys)) {
         $sql .= '(`' . implode('`,`', $keys) . '`)';
     }
     $sql .= ' VALUES';
     foreach ($values as $k => $v) {
         $sql .= ($k != 0 ? ',' : '') . '(' . \Radical\DB::A($v) . ')';
     }
     if (count($keys)) {
         $sql .= $append;
     }
     $this->sql = $sql;
     return $sql;
 }
コード例 #4
0
ファイル: Set.php プロジェクト: splitice/radical-db
 function toSQL()
 {
     if (count($this->data)) {
         return 'SET ' . \Radical\DB::A(array_map(function ($r) {
             return $r->expr();
         }, $this->data));
         //Ugly hack
     }
 }
コード例 #5
0
ファイル: MysqlFulltext.php プロジェクト: splitice/radical-db
 function search($text, TableReferenceInstance $table)
 {
     $orm = $table->getORM();
     $sql = new SelectStatement($table->getTable(), $orm->id);
     $this->_Filter($text, $sql);
     $res = \Radical\DB::Q($sql);
     $rows = $res->FetchAll();
     return $rows;
 }
コード例 #6
0
 function toSQL()
 {
     $db = \Radical\DB::getInstance();
     //Build Query
     $sql = 'UPDATE `' . $this->table . '` ';
     $sql .= $this->set . ' ';
     $sql .= $this->where;
     return $sql;
 }
コード例 #7
0
 function getData()
 {
     //Execute
     $res = \Radical\DB::Query($this->sql);
     //Table'ify
     $tableClass = $this->tableClass;
     return $res->FetchCallback(function ($obj) use($tableClass) {
         return TableCache::Add($tableClass::fromSQL($obj));
     });
 }
コード例 #8
0
ファイル: CreateTable.php プロジェクト: splitice/radical-db
 static function fromTable($table)
 {
     $query = new ShowCreateTable($table);
     try {
         $res = \Radical\DB::Q($query->toSQL());
         $data = $res->Fetch(DBAL\Fetch::NUM);
     } catch (\Exception $ex) {
         throw new \Exception('Couldnt get Create Table (' . $ex->getMessage() . ') for ' . $table, null, $ex);
     }
     return new static($data[1]);
 }
コード例 #9
0
ファイル: Fulltext.php プロジェクト: splitice/radical-db
 function toSQL()
 {
     $db = \Radical\DB::getInstance();
     $sql = 'MATCH (' . implode(',', $this->fields) . ') ';
     $sql .= 'AGAINST (' . $db->Escape($this->text);
     if ($this->boolean) {
         $sql .= ' IN BOOLEAN MODE';
     }
     $sql .= ')';
     return $sql;
 }
コード例 #10
0
 private function _triggerCreate($myisam, $innodb, $fields)
 {
     $sql = 'create trigger ' . $myisam . ' after insert on ' . $innodb;
     $sql .= ' FOR EACH ROW insert into ' . $myisam . ' VALUES(';
     foreach ($fields as $f) {
         $sql .= 'new.' . $f . ',';
     }
     $sql = substr($sql, 0, -1);
     $sql .= ')';
     \Radical\DB::Q($sql);
 }
コード例 #11
0
 static function transaction($function, ...$updating)
 {
     foreach ($updating as $k => $v) {
         if ($v instanceof Table) {
             $updating[$k] = $v->refreshTableData(true);
         }
     }
     $instance = \Radical\DB::getInstance();
     return $instance->transaction(function () use($updating, $function) {
         return $function(...$updating);
     });
 }
コード例 #12
0
ファイル: MultiQuery.php プロジェクト: splitice/radical-db
 function execute()
 {
     $sql = $this->BuildQuery();
     if (!$this->con->multi_query($sql)) {
         \Radical\DB::reConnect();
         $this->con->multi_query($sql);
     }
     //Reset SQL storage
     $this->sql = array();
     while ($this->con->next_result()) {
     }
     return $this;
 }
コード例 #13
0
ファイル: Cache.php プロジェクト: splitice/radical-db
 static function init()
 {
     self::$pool = \Radical\Cache\PooledCache::get('radical_orm', 'Memory');
     global $_SQL;
     $cfile = '/tmp/' . $_SQL->getDb();
     if (file_exists($cfile) && filemtime($cfile) >= time() - 30) {
         self::$key = file_get_contents($cfile);
     } else {
         touch($cfile);
         $sql = 'SELECT MAX(UNIX_TIMESTAMP( CREATE_TIME )) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = "' . $_SQL->getDb() . '"';
         self::$key = \Radical\DB::Q($sql)->Fetch(Fetch::FIRST);
         file_put_contents($cfile, self::$key);
     }
     if (Server::isProduction()) {
         self::$data = self::$pool->get($_SQL->getDb() . '_' . self::$key);
         register_shutdown_function(function () {
             Cache::save();
         });
     }
     if (!is_array(self::$data)) {
         self::$data = array();
     }
 }
コード例 #14
0
ファイル: Comparison.php プロジェクト: splitice/radical-db
 function toSQL()
 {
     $a = $this->a;
     if (is_string($a) && strpos($a, '(') === false && strpos($a, '`') === false) {
         $at = '';
         foreach (explode('.', $a) as $v) {
             if ($at) {
                 $at .= '.';
             }
             $at .= '`' . $v . '`';
         }
         $a = $at;
     }
     if ($this->b instanceof IComparison && count($this->b)) {
         return $a . ' ' . (string) $this->b;
     }
     $op = $this->operation;
     $b = $this->b;
     if ($this->autoNull && $b === null) {
         if ($op == '=') {
             $op = 'IS';
         } else {
             if ($op == '!=' || $op == '<>') {
                 $op = 'IS NOT';
             } else {
                 $op = trim(strtoupper($op));
                 if ($op != 'IS' && $op != 'IS NOT') {
                     throw new \Exception("Invalid operation with NULL");
                 }
             }
         }
         $this->escaped = true;
         $b = 'NULL';
     }
     return $a . ' ' . $op . ' ' . ($this->escaped ? $b : \Radical\DB::E($b));
 }
コード例 #15
0
ファイル: WhereOld.php プロジェクト: splitice/radical-db
 function toSQL($where = false)
 {
     if (is_string($this->parts)) {
         $sql = '';
         if ($where && count($this->parts)) {
             $sql = 'WHERE ';
         }
         $sql .= $this->parts;
         return $sql;
     }
     //Do for array
     $db = \Radical\DB::getInstance();
     $ret = array();
     foreach ($this->parts as $alias => $p) {
         $rr = '';
         if ($alias) {
             $rr = '`' . $alias . '`.';
         }
         foreach ($p as $k => $v) {
             $rri = $rr . '`' . $k . '`';
             if ($v instanceof IToSQL) {
                 $rri .= $v->toSQL();
             } else {
                 $rri .= '=' . $db->Escape($v);
             }
             $ret[] = $rri;
         }
     }
     //Build SQL
     $sql = '';
     if ($where) {
         $sql = 'WHERE ';
     }
     $sql .= implode(' ' . static::SEPPERATOR . ' ', $ret);
     return $sql;
 }
コード例 #16
0
ファイル: StringType.php プロジェクト: splitice/radical-db
 function toSQL()
 {
     return DB::E((string) $this);
 }
コード例 #17
0
 function exists()
 {
     $sql = 'show tables like ' . \Radical\DB::E($this->getTable());
     $res = \Radical\DB::Q($sql);
     if ($res->Fetch()) {
         return true;
     }
     return false;
 }
コード例 #18
0
ファイル: TableSet.php プロジェクト: splitice/radical-db
 private function query()
 {
     return \Radical\DB::Query($this->sql);
 }
コード例 #19
0
ファイル: DateTime.php プロジェクト: splitice/radical-db
 function toSQL()
 {
     return DB::E($this->toSQLFormat());
 }
コード例 #20
0
ファイル: Set.php プロジェクト: splitice/radical-db
 function toSQL()
 {
     return DB::e($this->__toString());
 }
コード例 #21
0
 function ensureExists($drop = false)
 {
     //Check if we need to do anything
     if ($this->Exists()) {
         if ($this->ValidateFields()) {
             return true;
         } else {
             if ($drop) {
                 \Radical\DB::Q('DROP TABLE ' . $this->_tableName);
             }
         }
     }
     //Create
     $this->Create();
     return false;
 }
コード例 #22
0
ファイル: StatementBase.php プロジェクト: splitice/radical-db
 function execute()
 {
     $sql = $this->toSQL();
     return \Radical\DB::Q($sql);
 }
コード例 #23
0
ファイル: Currency.php プロジェクト: splitice/radical-db
 function toSQL()
 {
     return DB::e($this->value);
 }
コード例 #24
0
ファイル: Table.php プロジェクト: splitice/radical-db
 static function exists()
 {
     return \Radical\DB::tableExists(static::TABLE);
 }
コード例 #25
0
ファイル: IPAddress.php プロジェクト: splitice/radical-net
 function toEscaped()
 {
     return \Radical\DB::E($this->ip);
 }
コード例 #26
0
ファイル: Between.php プロジェクト: splitice/radical-db
 function toSQL()
 {
     $db = \Radical\DB::getInstance();
     return ' BETWEEN ' . $this->E($db, $this->a) . ' AND ' . $this->E($db, $this->b);
 }
コード例 #27
0
 function getCount()
 {
     //Check for entry
     $count = clone $this;
     $count->fields('COUNT(*)');
     $count->remove_limit();
     //$count->remove_joins();
     $count->remove_order_by();
     $res = \Radical\DB::Query($count);
     return $res->Fetch(DBAL\Fetch::FIRST, new Cast\Integer());
 }