public function replaceDynamicParameter($sql, $parameter) { foreach ($this->_mappings as $property) { $value = TPropertyAccess::get($parameter, $property); $sql = preg_replace('/' . TSimpleDynamicParser::DYNAMIC_TOKEN . '/', str_replace('$', '\\$', $value), $sql, 1); } return $sql; }
/** * @param mixed object to obtain the property from. * @param TParameterProperty parameter property. * @return mixed property value. * @throws TSqlMapException if property access is invalid. */ protected function getObjectValue($object, $property) { try { return TPropertyAccess::get($object, $property->getProperty()); } catch (TInvalidPropertyException $e) { throw new TSqlMapException('sqlmap_unable_to_get_property_for_parameter', $this->getID(), $property->getProperty(), is_object($object) ? get_class($object) : gettype($object)); } }
/** * Apply the result to an object. * @param array a result set row retrieved from the database * @param object result object, array or list * @return object result filled with data. */ protected function fillResultObjectProperty($row, $resultObject) { $index = 0; $registry = $this->getManager()->getTypeHandlers(); foreach ($row as $k => $v) { $property = new TResultProperty(); if (is_string($k) && strlen($k) > 0) { $property->setColumn($k); } $property->setColumnIndex(++$index); $type = gettype(TPropertyAccess::get($resultObject, $k)); $property->setType($type); $value = $property->getPropertyValue($registry, $row); TPropertyAccess::set($resultObject, $k, $value); } return $resultObject; }
/** * Returns true if the result property {@link Type getType()} is of \ArrayAccess * or that the actual result object is an array or implements \ArrayAccess * @param object result object * @return boolean true if the result object is an instance of \ArrayAccess or is an array. */ public function instanceOfArrayType($target) { if ($this->getType() === null) { $prop = TPropertyAccess::get($target, $this->getProperty()); if (is_object($prop)) { return $prop instanceof \ArrayAccess; } return is_array($prop); } return $this->getPropertyValueType() == self::ARRAY_TYPE; }
public function testArrayAccess() { $thingamajig = array('a' => 'foo', 'b' => 'bar', 'c' => new _PropertyAccessTestHelperPublicVar(), 'd' => new _PropertyAccessTestHelperStaticProperties(), 'e' => new _PropertyAccessTestHelperDynamicProperties()); $testobj = new _PropertyAccessTestHelperPublicVar(); TPropertyAccess::set($testobj, 'a', $thingamajig); $tmp = TPropertyAccess::get($testobj, 'a'); self::assertTrue(is_array($tmp)); self::assertEquals($thingamajig, $tmp); self::assertEquals('foo', TPropertyAccess::get($testobj, 'a.a')); self::assertEquals('bar', TPropertyAccess::get($testobj, 'a.b')); self::assertTrue(TPropertyAccess::get($testobj, 'a.c') instanceof _PropertyAccessTestHelperPublicVar); self::assertTrue(TPropertyAccess::get($testobj, 'a.d') instanceof _PropertyAccessTestHelperStaticProperties); self::assertTrue(TPropertyAccess::get($testobj, 'a.e') instanceof _PropertyAccessTestHelperDynamicProperties); TPropertyAccess::set($testobj, 'a.c.a', 10); TPropertyAccess::set($testobj, 'a.d.a', 10); TPropertyAccess::set($testobj, 'a.e.a', 10); self::assertEquals(10, TPropertyAccess::get($testobj, 'a.c.a')); self::assertEquals(10, TPropertyAccess::get($testobj, 'a.d.a')); self::assertEquals(10, TPropertyAccess::get($testobj, 'a.e.a')); TPropertyAccess::set($testobj, 'a.c.c', 30); TPropertyAccess::set($testobj, 'a.d.c', 30); TPropertyAccess::set($testobj, 'a.e.c', 30); self::assertEquals(30, TPropertyAccess::get($testobj, 'a.c.c')); self::assertEquals(30, TPropertyAccess::get($testobj, 'a.d.c')); self::assertNull(TPropertyAccess::get($testobj, 'a.e.c')); self::assertNull(TPropertyAccess::get($testobj, 'a.e.C')); self::setExpectedException('Prado\\Data\\SqlMap\\DataMapper\\TInvalidPropertyException'); TPropertyAccess::get($testobj, 'a.c.C'); self::setExpectedException('Prado\\Data\\SqlMap\\DataMapper\\TInvalidPropertyException'); TPropertyAccess::get($testobj, 'a.d.C'); }
/** * Set the object properties for all the child nodes visited. * @param string parent node id * @param array list of child nodes visited. */ protected function onChildNodesVisited($parent, $nodes) { if (empty($parent) || empty($this->_entries[$parent])) { return; } $parentObject = $this->_entries[$parent]['object']; $property = $this->_entries[$nodes[0]]['property']; $list = TPropertyAccess::get($parentObject, $property); foreach ($nodes as $node) { if ($list instanceof TList) { $parentObject->{$property}[] = $this->_entries[$node]['object']; } else { if (is_array($list)) { $list[] = $this->_entries[$node]['object']; } else { throw new TSqlMapExecutionException('sqlmap_property_must_be_list'); } } } if (is_array($list)) { TPropertyAccess::set($parentObject, $property, $list); } if ($this->_entries[$parent]['property'] === null) { $this->_list[] = $parentObject; } }