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:
2017-05-04 12:16:26 +00:00
parent 4e65cbe987
commit a3cceef004

View File

@@ -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 ();