Esempio n. 1
0
 /**
  * 测试
  */
 private function test()
 {
     //delete from tableTest where (id='2') limit 10 ;
     $delete = \HuiLib\Db\Query::delete()->table('test')->where(Where::createPair('id', '2'))->limit(10);
     //echo $delete->query();
     echo $delete->toString();
 }
Esempio n. 2
0
 /**
  * Select 普通测试
  */
 private function testAdapterSelect()
 {
     $select = \HuiLib\Db\Query::select()->table('test.test')->where(Where::createPair('id', 2))->limit(10)->offset(0)->enableForUpdate();
     $re = $select->query();
     \HuiLib\Helper\Debug::out($re->fetchAll());
     echo $select->toString();
 }
Esempio n. 3
0
 /**
  * 测试
  */
 private function test()
 {
     //update tableTest set field1='fvalue1', num=num+1 where (id='16') ;
     $update = \HuiLib\Db\Query::update()->table('tableTest')->where(Where::createPair('id', '16'));
     $update->sets(array('field1' => 'fvalue1', 'field2' => 'fvalue2', 'num' => array('plain' => 'num=num+1')));
     //$update->query();
     echo $update->toString();
 }
Esempio n. 4
0
 public function flush()
 {
     if (!$this->buffer) {
         return FALSE;
     }
     $this->lastFlush = time();
     $rows = Query::insert($this->table)->batchSaveRows($this->buffer)->exec();
     $this->buffer = array();
     return $rows;
 }
Esempio n. 5
0
 /**
  * 测试多行行对象插入
  */
 private function testRowInstanceInsert()
 {
     //insert into user_salt (`Uid`, `Salt`) values ('31', 'fdadsf'), ('32', 'aaadsf'), ('35', 'ddddd') ;
     $batch = array();
     $row = \Model\Table\UserSalt::create()->createRow();
     $row->Uid = 31;
     $row->Salt = "fdadsf";
     $batch[] = $row;
     $row = \Model\Table\UserSalt::create()->createRow();
     $row->Uid = 32;
     $row->Salt = "aaadsf";
     $batch[] = $row;
     $row = \Model\Table\UserSalt::create()->createRow();
     $row->Uid = 35;
     $row->Salt = "ddddd";
     $batch[] = $row;
     $insert = \HuiLib\Db\Query::Insert()->batchSaveRows($batch);
     echo $insert->toString();
     //$insert->query();
 }
Esempio n. 6
0
 private function testWhereBenchMark()
 {
     Debug::mark('startSelect');
     $select = Query::select('test');
     Debug::mark('endSelect');
     Debug::mark('startWhere');
     $where1 = Where::createPair('test', 'zzzzzzzzzzzzzzzzzzzzzzz')->orCase(Where::createPlain('test is null'));
     $where = Where::createQuote('num in (?)', array(3, 5, 16))->andCase($where1, Where::HAND_LEFT);
     Debug::mark('endWhere');
     //初始化adapter后才能escape
     $select->where($where);
     //echo $select->toString();
     Debug::mark('startQuery');
     $re = $select->query();
     Debug::mark('endQuery');
     \HuiLib\Helper\Debug::out($re->fetchAll());
     Debug::elapsed('startSelect', 'endSelect');
     Debug::elapsed('startWhere', 'endWhere');
     Debug::elapsed('startQuery', 'endQuery');
     Debug::elapsed('startSelect', 'endQuery');
     Debug::elapsed('startSelect', 'endALL');
 }
Esempio n. 7
0
 /**
  * 编译成SQL语句
  */
 protected function compile()
 {
     $parts = array();
     $parts['start'] = 'select';
     $parts[self::COLUMNS] = $this->renderColumns();
     $parts['from'] = 'from';
     $parts[self::TABLE] = $this->renderTable();
     $parts[self::JOINS] = $this->renderJoin();
     $parts[self::INDEX] = $this->renderIndex();
     $parts[self::WHERE] = $this->renderWhere();
     $parts[self::UNION] = $this->renderUnion();
     //一下不能在union子句中出现
     $parts[self::ORDER] = $this->renderOrder();
     $parts[self::GROUP] = $this->renderGroup();
     $parts[self::LIMIT] = $this->renderLimit();
     $parts[self::OFFSET] = $this->renderOffset();
     $parts[self::FOR_UPDATE] = $this->renderForUpdate();
     $parts[self::ENDS] = $this->ends;
     $this->parts =& $parts;
     return parent::compile();
 }
Esempio n. 8
0
 /**
  * 通过关联数据插入某表一行数据
  *
  * @param array $dataArray 插入数组
  */
 public function delete(\HuiLib\Db\Query\Where $where)
 {
     $delete = Query::delete(static::TABLE);
     if ($this->dbAdapter !== NULL) {
         $delete->setAdapter($this->dbAdapter);
     }
     return $delete->where($where)->query();
 }
Esempio n. 9
0
 /**
  * 渲染Quote语句
  * 
  * TODO 引号中的问号问题,目前尽量传递进的占位符短小
  */
 private function renderQuote()
 {
     return str_ireplace('?', self::$query->escape($this->placeBind), $this->placeHolder);
 }
Esempio n. 10
0
$insert->fields(array('field1', 'field2'))->values(array('fvalue1', 'fvalue2'));
//insert into test (field1, field2) values ('fvalue1', 'fvalue2'), ('fvalue11', 'fvalue22') ;
$insert->values(array('fvalue11', 'fvalue22'));
//附加 前面的
//2.2.2 关联数组插入模式
//insert into test (field1, field2) values ('fvalue1', 'fvalue2'), ('fvalue11', 'fvalue22') ;
$insert->kvInsert(array('field1' => 'fvalue1', 'field2' => 'fvalue2'))->values(array('fvalue11', 'fvalue22'));
//2.2.3 Duplicate Key Update模式
//需要注意dupFields和dupValues的关联性,弱耦合
$insert->enableDuplicate(true);
//开启自动Dup更新模式
//insert into test set field1='fvalue1', field2='fvalue2' on duplicate key update field1='newfvalue1', num=num+1 ;
$insert->fields(array('field1', 'field2'))->dupFields(array('field1', 'num'))->values(array('fvalue1', 'fvalue2'), array('field2' => 'newfvalue1', array('plain' => 'num=num+1')));
//2.2.4 通过row对象数组或rowset批量插入
$insert->batchSaveRows();
//2.3 更新部分
//获取更新对象
//update tableTest set field1='fvalue1', num=num+1 where (id='16') ;
$update = \HuiLib\Db\Query::update('tableTest');
//支持两种更新Set模式,KV模式和Plain模式
$update->sets(array('field1' => 'fvalue1', 'num' => array('plain' => 'num=num+1')));
//绑定条件
$update->where(Where::createPair('id', '16'));
//2.4 删除部分
//获取删除对象
//delete from tableTest where (id='2') limit 10 ;
$delete = \HuiLib\Db\Query::delete('tableTest');
//设置删除条件
$delete->where(Where::createPair('id', '2'));
//设置删除行数
$delete->limit(10);
Esempio n. 11
0
 /**
  * 直接发起默认数据库请求
  * 
  * @return int 删除操作影响行数
  */
 public function query()
 {
     $stmt = parent::query();
     return $stmt->rowCount();
 }
Esempio n. 12
0
 public function table($table)
 {
     parent::table($table);
     return $this;
 }
Esempio n. 13
0
 /**
  * 编译成SQL语句
  */
 protected function compile()
 {
     $parts = array();
     $parts['start'] = 'update';
     $parts[self::TABLE] = $this->renderTable();
     $parts['setSep'] = 'set';
     $parts[self::SETS] = $this->renderSets();
     $parts[self::WHERE] = $this->renderWhere();
     $parts[self::LIMIT] = $this->renderLimit();
     $parts[self::ENDS] = $this->ends;
     $this->parts =& $parts;
     return parent::compile();
 }
Esempio n. 14
0
 /**
  * 删除一个值
  *
  * @return int
  */
 public function delete()
 {
     $tableInstance = $this->tableInstance;
     if ($tableInstance === NULL || $tableInstance::TABLE === NULL) {
         throw new Exception('Table class constant TABLE has not been set.');
     }
     $delete = Query::delete($tableInstance::TABLE);
     if ($this->dbAdapter !== NULL) {
         $delete->setAdapter($this->dbAdapter);
     }
     $delete->where(Where::createPair(static::PRIMAY_IDKEY, $this->data[static::PRIMAY_IDKEY]));
     $this->onBeforeDelete();
     $result = $delete->query();
     $this->onAfterDelete();
     return $result;
 }