public function testEquals() { $criteria = "id = 1"; $crits = array('id = 1' => array('id', '=', 1, '`id` = 1'), 'name = foo' => array('name', '=', 'foo', "`name` = 'foo'"), 'name ~= foo' => array('name', '~=', 'foo', "`name` LIKE 'foo'"), 'id > 2' => array('id', '>', 2, '`id` > 2')); foreach ($crits as $criteria => $d) { $c = new AetherORMCriteria($criteria); $this->assertEquals($d[0], $c->field); $this->assertEquals($d[1], $c->operand); $this->assertEquals($d[2], $c->value); $this->assertEquals($d[3], $c->getSql()); } }
/** * Willy wonkas magic little factory. * Every method called unto Connection goes here for parsing * and its then delegated on to a table * * @return AetherORMTable * @param string $name * @param array $args */ public function __call($func, $args) { $tableName = strtolower($func); $name = $this->config['name']; /** * Get scheme */ if (!array_key_exists($tableName, $this->schemes)) { $schemeData = $this->conn->list_fields($tableName); $this->schemes[$tableName] = new AetherORMScheme($tableName, $schemeData); } // TODO Resource creation needs fix. Load data! $resource = $this->schemes[$tableName]->getObject(); //$resource = new AetherORMResource($tableName,array()); $table = new AetherORMTable($resource, $name, $tableName); if (count($args) == 0) { // No args means get the whole table object $result = $table; } elseif (count($args) == 1 and is_numeric($args[0])) { /** * Special case for only one integer arg. * This means we want to select by primary key */ $primaryKey = $args[0]; $result = $table->byId($primaryKey); /** * TODO * 1. Ask IM if Row object exists * 2. Ask identity map for scheme for table * 3. Load scheme (here or IM?) * 4. Load Row based on scheme */ } else { /** * Regular criteria based search. * "Criteria" includes everything not being a full table * fetch or a single row fetch by primary key */ $criterias = array(); $where = "WHERE "; foreach ($args as $argument) { $c = new AetherORMCriteria($argument); $where .= $c->getSql() . " AND"; $criterias[] = $c; } // Remove the last AND $where = substr($where, 0, -4); /** * TODO THis should go through a query builder, not as * directly typed SQL * TODO Support for OR-based WHERE clauses? */ $result = $table->bySql("SELECT * FROM {$tableName} {$where}"); } return $result; }