- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
class Query {
protected $baseTable;
protected $baseTableAlias;
protected $whereGroup;
protected $joins = array();
protected $fields = array();
protected $executed = FALSE;
protected $resource = NULL;
function __construct($base_table = 'node', $alias = 'n') {
$this->whereGroup = new QueryWhereGroup();
$this->baseTable = $base_table;
$this->baseTableAlias = empty($alias) ? $base_table : $alias;
}
function select($fields) {
settype($fields, 'array');
foreach ($fields as $alias => $field) {
if (is_numeric($alias)) {
$this->fields[] = $field;
}
else {
$this->fields[$alias] = "$field as $alias";
}
}
return $this;
}
/**
* @param QueryWhereGroup $whereGroup
* @return Query
*/
function where($whereGroup) {
call_user_func_array(array($this->whereGroup, 'cond'), func_get_args());
return $this;
}
function createWhereGroup() {
return new QueryWhereGroup();
}
function join($table, $alias = NULL, $condition, $join_type = 'INNER') {
if (!$alias) {
$alias = $table;
}
if (is_array($condition)) {
$condition = 'USING ('. join(', ', $condition) .')';
}
if (!preg_match('/^ON|USING/i', $condition)) {
$condition = 'ON '. $condition;
}
$this->joins[$alias] = "$join_type JOIN $table $alias $condition";
return $this;
}
function compile() {
$select_fields = join(', ', array_unique($this->fields));
$joins_list = join("\n", $this->joins);
$where_conditions = $this->whereGroup->compile();
if (!empty($where_conditions)) {
$where_conditions = 'WHERE '. $where_conditions;
}
return "SELECT $select_fields FROM {{$this->baseTable}} {$this->baseTableAlias} \n $joins_list $where_conditions";
}
function args() {
return $this->whereGroup->args;
}
function execute() {
return db_query($this->compile(), $this->args());
}
function fetchAll() {
$res = $this->execute();
while($row = db_fetch_object($res)) {
$rows[] = $row;
}
return $rows;
}
}
rO_ot 24.03.2011 01:31 # 0
sectus 24.03.2011 05:06 # 0
bugmenot 24.03.2011 07:45 # −1
sectus 24.03.2011 09:08 # 0
bugmenot 24.03.2011 09:22 # −1
sectus 24.03.2011 09:51 # 0
bugmenot 24.03.2011 10:42 # −1
совсем уже с этим вашим мускулом азы не знаете...
sectus 24.03.2011 12:31 # +2
bugmenot 24.03.2011 13:54 # −1
в любом случае, этот "конструктор запросов" сказочно убог (речь не об отсутствии INSERT et al), и пора уже сейчас задуматься об его переписывании
спойлер: я сказал задуматься, а не бросаться сразу писать килостроки хуйни :-P
vectoroc 24.03.2011 14:14 # 0
И да, это просто велосипед, написанный на коленке, не претендующий на что либо
sectus 24.03.2011 15:58 # 0
bugmenot 24.03.2011 17:52 # −1
vectoroc 24.03.2011 09:18 # 0
limit, order, group несложно встроить, я думаю.
105_306330_ru 24.08.2021 20:37 # 0