dblayeroo: Manage correctely the test of the dblayeroo class in Join case
dblayeroo: Manage correctely the WHERE clause in join mode git-svn-id: https://svn.fournier38.fr/svn/ProgSVN/trunk@3573 bf3deb0d-5f1a-0410-827f-c0cc1f45334c
This commit is contained in:
@@ -1336,7 +1336,8 @@ class dblayeroo
|
|||||||
$this->debugLog ("Entering setForeignObj (OBJECT)");
|
$this->debugLog ("Entering setForeignObj (OBJECT)");
|
||||||
if (! is_object ($object))
|
if (! is_object ($object))
|
||||||
$this->DBException ("Invalid setForeignObj parameter: not an object");
|
$this->DBException ("Invalid setForeignObj parameter: not an object");
|
||||||
if (! is_subclass_of ($object, __CLASS__))
|
if (! is_subclass_of ($object, __CLASS__) &&
|
||||||
|
get_class ($object) !== "dblayeroo")
|
||||||
$this->DBException (
|
$this->DBException (
|
||||||
"Invalid object provided to setForeignObj (not dblayeroo object)");
|
"Invalid object provided to setForeignObj (not dblayeroo object)");
|
||||||
if (! isset ($object->table))
|
if (! isset ($object->table))
|
||||||
@@ -1581,7 +1582,8 @@ class dblayeroo
|
|||||||
$this->DBException ("Invalid joinType provided to join (not known)");
|
$this->DBException ("Invalid joinType provided to join (not known)");
|
||||||
if (! is_object ($object))
|
if (! is_object ($object))
|
||||||
$this->DBException ("Invalid object provided to join (not object)");
|
$this->DBException ("Invalid object provided to join (not object)");
|
||||||
if (! is_subclass_of ($object, __CLASS__))
|
if (! is_subclass_of ($object, __CLASS__) &&
|
||||||
|
get_class ($object) !== "dblayeroo")
|
||||||
$this->DBException (
|
$this->DBException (
|
||||||
"Invalid object provided to join (not dblayeroo object)");
|
"Invalid object provided to join (not dblayeroo object)");
|
||||||
if ($this->dsn !== $object->dsn)
|
if ($this->dsn !== $object->dsn)
|
||||||
@@ -1628,18 +1630,6 @@ class dblayeroo
|
|||||||
// fields of object
|
// fields of object
|
||||||
$this->joins[] = "$joinType JOIN ".
|
$this->joins[] = "$joinType JOIN ".
|
||||||
$this->sep.$object->tableprefix.$object->table.$this->sep." ON $tmp";
|
$this->sep.$object->tableprefix.$object->table.$this->sep." ON $tmp";
|
||||||
// Correct the WHERE in the main with the object WHERE
|
|
||||||
$this->whereExpression = array_merge ($object->whereExpression,
|
|
||||||
$this->whereExpression);
|
|
||||||
$this->whereValues = array_merge ($object->whereValues, $this->whereValues);
|
|
||||||
// Add the new object fields to the this. The fields must be available to
|
|
||||||
// be normalized at the end
|
|
||||||
$tmp = array ();
|
|
||||||
foreach ($object->fields as $key=>$data)
|
|
||||||
{
|
|
||||||
$tmp[$this->sep.$object->tableprefix.$object->table.$this->sep.".".
|
|
||||||
$this->sep.$key.$this->sep] = $data;
|
|
||||||
}
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
@@ -1763,6 +1753,56 @@ class dblayeroo
|
|||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
|
/** Get the WHERE clause of the object.
|
||||||
|
* If the joinObject is set, return all the WHERE clauses
|
||||||
|
*/
|
||||||
|
public function whereGetExpression ()
|
||||||
|
/* {{{ */
|
||||||
|
{
|
||||||
|
$whereExpression = $this->whereExpression;
|
||||||
|
if ($whereExpression === null)
|
||||||
|
$whereExpression = array ();
|
||||||
|
if ($this->joinObject !== null)
|
||||||
|
{
|
||||||
|
foreach ($this->joinObject as $obj)
|
||||||
|
{
|
||||||
|
$exp = $obj->whereGetExpression ();
|
||||||
|
if (count ($whereExpression) && count ($exp))
|
||||||
|
$whereExpression[] = "AND";
|
||||||
|
if (count ($exp))
|
||||||
|
$whereExpression[] = "(";
|
||||||
|
$whereExpression = array_merge ($whereExpression,
|
||||||
|
$exp);
|
||||||
|
if (count ($exp))
|
||||||
|
$whereExpression[] = ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $whereExpression;
|
||||||
|
}
|
||||||
|
/* }}} */
|
||||||
|
|
||||||
|
/** Get the WHERE values of the object.
|
||||||
|
* If the joinObject is set, return all the WHERE clauses with AND and
|
||||||
|
* parenthesis
|
||||||
|
*/
|
||||||
|
public function whereGetValues ()
|
||||||
|
/* {{{ */
|
||||||
|
{
|
||||||
|
$whereValues = $this->whereValues;
|
||||||
|
if ($whereValues === null)
|
||||||
|
$whereValues = array ();
|
||||||
|
if ($this->joinObject !== null)
|
||||||
|
{
|
||||||
|
foreach ($this->joinObject as $obj)
|
||||||
|
{
|
||||||
|
$whereValues = array_merge ($whereValues,
|
||||||
|
$obj->whereGetValues ());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $whereValues;
|
||||||
|
}
|
||||||
|
/* }}} */
|
||||||
|
|
||||||
/** Add a new ORDER sort. The multiple ORDERS are used from the first added to
|
/** Add a new ORDER sort. The multiple ORDERS are used from the first added to
|
||||||
* the last added
|
* the last added
|
||||||
* @param string $field The field to sort
|
* @param string $field The field to sort
|
||||||
@@ -1927,8 +1967,9 @@ class dblayeroo
|
|||||||
$sql .= " $displayColumns\n FROM $this->sep$this->tableprefix".
|
$sql .= " $displayColumns\n FROM $this->sep$this->tableprefix".
|
||||||
"$this->table$this->sep";
|
"$this->table$this->sep";
|
||||||
$sql .= "\n ".$this->joinsGet ();
|
$sql .= "\n ".$this->joinsGet ();
|
||||||
if (! empty ($this->whereExpression))
|
$whereGetExpression = $this->whereGetExpression ();
|
||||||
$sql .= "\n WHERE ". implode (" ", $this->whereExpression);
|
if (! empty ($whereGetExpression))
|
||||||
|
$sql .= "\n WHERE ". implode (" ", $whereGetExpression);
|
||||||
if (count ($order))
|
if (count ($order))
|
||||||
$sql .= "\n ORDER BY ". implode (",", $order);
|
$sql .= "\n ORDER BY ". implode (",", $order);
|
||||||
if (! empty ($this->limitExpression))
|
if (! empty ($this->limitExpression))
|
||||||
@@ -1964,8 +2005,9 @@ class dblayeroo
|
|||||||
break;
|
break;
|
||||||
case "DELETE":
|
case "DELETE":
|
||||||
$sql = "DELETE FROM $this->sep$this->tableprefix$this->table$this->sep";
|
$sql = "DELETE FROM $this->sep$this->tableprefix$this->table$this->sep";
|
||||||
if (! empty ($this->whereExpression))
|
$whereGetExpression = $this->whereGetExpression ();
|
||||||
$sql .= " WHERE ". implode (" ", $this->whereExpression);
|
if (! empty ($whereGetExpression))
|
||||||
|
$sql .= "\n WHERE ". implode (" ", $whereGetExpression);
|
||||||
if (! empty ($this->orderExpression))
|
if (! empty ($this->orderExpression))
|
||||||
$sql .= " ORDER BY ". implode (",", $this->orderExpression);
|
$sql .= " ORDER BY ". implode (",", $this->orderExpression);
|
||||||
if (! empty ($this->limitExpression))
|
if (! empty ($this->limitExpression))
|
||||||
@@ -1987,8 +2029,9 @@ class dblayeroo
|
|||||||
$sql .= $this->sep.$key.$this->sep."=:".$hash;
|
$sql .= $this->sep.$key.$this->sep."=:".$hash;
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
if (! empty ($this->whereExpression))
|
$whereGetExpression = $this->whereGetExpression ();
|
||||||
$sql .= " WHERE ". implode (" ", $this->whereExpression);
|
if (! empty ($whereGetExpression))
|
||||||
|
$sql .= "\n WHERE ". implode (" ", $whereGetExpression);
|
||||||
if (! empty ($this->orderExpression))
|
if (! empty ($this->orderExpression))
|
||||||
$sql .= " ORDER BY ". implode (",", $this->orderExpression);
|
$sql .= " ORDER BY ". implode (",", $this->orderExpression);
|
||||||
if (! empty ($this->limitExpression))
|
if (! empty ($this->limitExpression))
|
||||||
@@ -2014,7 +2057,7 @@ class dblayeroo
|
|||||||
$text = "";
|
$text = "";
|
||||||
if (!$textForm)
|
if (!$textForm)
|
||||||
$st = self::$instance[$this->dsn]->prepare ($sql);
|
$st = self::$instance[$this->dsn]->prepare ($sql);
|
||||||
foreach ($this->whereValues as $hash=>$val)
|
foreach ($this->whereGetValues () as $hash=>$val)
|
||||||
{
|
{
|
||||||
$field = $val["field"];
|
$field = $val["field"];
|
||||||
$value = $val["value"];
|
$value = $val["value"];
|
||||||
@@ -2364,7 +2407,7 @@ class dblayeroo
|
|||||||
}
|
}
|
||||||
$this->debugLog ("Entering createRequest ()");
|
$this->debugLog ("Entering createRequest ()");
|
||||||
$sql = $this->createRequest ();
|
$sql = $this->createRequest ();
|
||||||
$this->debugLog ("Entering prepareRequest (",$sql,", ",false,")");
|
$this->debugLog ("Entering prepareRequest (XXX, ",false,")");
|
||||||
$st = $this->prepareRequest ($sql, false);
|
$st = $this->prepareRequest ($sql, false);
|
||||||
$this->debugLog ("'",$this->getDisplayQuery (),"'");
|
$this->debugLog ("'",$this->getDisplayQuery (),"'");
|
||||||
$st->execute ();
|
$st->execute ();
|
||||||
|
|||||||
Reference in New Issue
Block a user