2025/10/03: Difference between revisions

From Woozle Writes Code
Jump to navigation Jump to search
(Created page with "{{nav/codeblog}} Trying to sort out a complex bug in Ferreteria -- a thing gets set to a wrapper instead of the target-object somewhere, but the error shows up later when it's retrieved. How is it getting set wrong in the first place? (...or maybe it's being retrieved incorrectly?) Relevant messages: * Got to {{l/ver/clade|p=ferreteria|v=v0.6|Config/Roster/for|AnObject}}.php line 31 in (id124) c{{l/ver/clade|p=ferreteria|v=v0.6|Sys\Data\Engine\Conn\MyMar|Maria}}->Regist...")
 
No edit summary
 
(5 intermediate revisions by the same user not shown)
Line 6: Line 6:
** Signing in hetz1 as c{{l/ver/clade|p=ferreteria|v=v0.6|Sys\Data\Engine\Conn\MyMar|Maria}} in roster class c{{l/ver/clade|p=ferreteria|v=v0.6|Sys\Data\Engine\aux|DbList}}
** Signing in hetz1 as c{{l/ver/clade|p=ferreteria|v=v0.6|Sys\Data\Engine\Conn\MyMar|Maria}} in roster class c{{l/ver/clade|p=ferreteria|v=v0.6|Sys\Data\Engine\aux|DbList}}
* Got to {{l/ver/clade|p=ferreteria|v=v0.6|Sys/Data/Things/Array|QStor}}.php line 43 in (id93) c{{l/ver/clade|p=ferreteria|v=v0.6|Sys\Data\Engine\aux|DbList}}->SetIt() SETTING [hetz1] = [object (id124) of class c{{l/ver/clade|p=ferreteria|v=v0.6|Sys\Data\Engine\Conn\MyMar|Maria}} in c{{l/ver/clade|p=ferreteria|v=v0.6|Sys\Data\Engine\aux|QDbConn}}
* Got to {{l/ver/clade|p=ferreteria|v=v0.6|Sys/Data/Things/Array|QStor}}.php line 43 in (id93) c{{l/ver/clade|p=ferreteria|v=v0.6|Sys\Data\Engine\aux|DbList}}->SetIt() SETTING [hetz1] = [object (id124) of class c{{l/ver/clade|p=ferreteria|v=v0.6|Sys\Data\Engine\Conn\MyMar|Maria}} in c{{l/ver/clade|p=ferreteria|v=v0.6|Sys\Data\Engine\aux|QDbConn}}
* '''PHP Fatal error''':  Uncaught TypeError: c{{l/ver/clade|p=ferreteria|v=v0.6|Sys\Data\Engine\aux|QDbConn}}::SetIt(): Argument #1 ($o) must be of type i{{l/ver/clade|p=ferreteria|v=v0.6|Sys\Data\Engine|Conn}}, c{{l/ver/clade|p=ferreteria|v=v0.6|Sys\Data\Engine\aux|QDbConn}} given, called in {{l/ver/clade|p=ferreteria|v=v0.6|Sys/Data/Things/Array/ifaces|Keyed}}.php on line 51 and defined in {{l/ver/clade|p=ferreteria|v=v0.6|Sys/Data/Engine/aux|QDbConn}}.php:28
** '''Keyed.php line 51''': {{fmt/php/inline|$os->SetIt($this->ar[$snKey]);}}
Stack trace:
<pre>
#0 /home/woozle/Sync/dev/local/v0.6/ferreteria/src/Sys/Data/Things/Array/ifaces/Keyed.php(51): Woozalia\Ferret\Sys\Data\Engine\aux\cQDbConn->SetIt()
#1 /home/woozle/Sync/dev/local/v0.6/ferreteria/src/Sys/Data/Engine/aux/ActionRq/Admin/ToDbOper.php(88): Woozalia\Ferret\Sys\Data\Things\Array\cQStor->QryIt()
#2 /home/woozle/Sync/dev/local/v0.6/ferreteria/src/Sys/Data/Engine/aux/ActionRq/Admin/ToDbOper.php(44): Woozalia\Ferret\Sys\Data\Engine\aux\ActionRq\Admin\caToDbOper->FetchDbOper()
#3 /home/woozle/Sync/dev/local/v0.6/ferreteria/src/Sys/Data/Engine/aux/ActionRq/Admin/ToDbOper/EngDbScList.php(15): Woozalia\Ferret\Sys\Data\Engine\aux\ActionRq\Admin\caToDbOper->QDbOper()
#4 /home/woozle/Sync/dev/local/v0.6/ferreteria/apps/futils/src/Kiosk/WUIDL.php(206): Woozalia\Ferret\Sys\Data\Engine\aux\ActionRq\Admin\ToDbOper\caEngDbScList->Go()
#5 /home/woozle/Sync/dev/local/v0.6/ferreteria/src/App/Routed.php(44): Woozalia\Futil\Kiosk\caWUIDL->RunInput()
#6 /home/woozle/Sync/dev/local/v0.6/ferreteria/src/App.php(60): Woozalia\Ferret\App\caRouted->ExecuteActions()
#7 /home/woozle/Sync/dev/local/v0.6/ferreteria/src/App.php(38): Woozalia\Ferret\caApp->TryIt()
#8 /home/woozle/Sync/dev/local/v0.6/ferreteria/src/App.php(34): Woozalia\Ferret\caApp->GoDirectly()
#9 /home/woozle/Sync/dev/local/v0.6/ferreteria/boot/go.php(74): Woozalia\Ferret\caApp->Go()
#10 /home/woozle/Sync/dev/local/v0.6/ferreteria/apps/futils/run/dba/go.php(27): Woozalia\Ferret\boot\caPoinger->__construct()
#11 {main}
  thrown in /home/woozle/Sync/dev/local/v0.6/ferreteria/src/Sys/Data/Engine/aux/QDbConn.php on line 28
</pre>
===15:10===
The immediate problem was that this line was referencing the array-element ({{fmt/php/inline|$this->ar[$snKey]}}) directly, instead of via {{fmt/php/inline|$this->GetIt()}}. That works for {{l/ver/clade|p=ferreteria|v=v0.6|Sys/Data/Things/Array|DStor}} classes, but not for {{l/ver/clade|p=ferreteria|v=v0.6|Sys/Data/Things/Array|QStor}} -- because each element in a QStor is a ''{{l/ver/clade|p=ferreteria|v=v0.6|Data\Mem|QVar}} wrapper'' for the final value, rather than the value itself.
After fixing this, the problem now is that it returns a c{{l/ver/clade|p=ferreteria|v=v0.6|Sys\Data\Engine\aux|QDbConn}} where an i{{l/ver/clade|p=ferreteria|v=v0.6|Sys\Data\Engine\aux\ActionRq\aux|QDbOper}} is expected -- but this represents an intentional change started elsewhere, so it makes sense. It's now just a matter of updating the QDbOper expectations to QDbConn.
===20:16===
There was another potential problem with confusion between Db<u>Conn</u> and Db<u>Comm</u>. To avoid this, I'm renaming Db<u>Comm</u> stuff to Db<u>Datex</u>.
Continued: [[../04]]

Latest revision as of 13:14, 4 October 2025

Codeblog

Recovered

Trying to sort out a complex bug in Ferreteria -- a thing gets set to a wrapper instead of the target-object somewhere, but the error shows up later when it's retrieved. How is it getting set wrong in the first place? (...or maybe it's being retrieved incorrectly?)

Relevant messages:

  • Got to AnObject.php line 31 in (id124) cMaria->RegisterThis()
  • Got to QStor.php line 43 in (id93) cDbList->SetIt() SETTING [hetz1] = [object (id124) of class cMaria in cQDbConn
  • PHP Fatal error: Uncaught TypeError: cQDbConn::SetIt(): Argument #1 ($o) must be of type iConn, cQDbConn given, called in Keyed.php on line 51 and defined in QDbConn.php:28
    • Keyed.php line 51: $os->SetIt($this->ar[$snKey]);

Stack trace:

#0 /home/woozle/Sync/dev/local/v0.6/ferreteria/src/Sys/Data/Things/Array/ifaces/Keyed.php(51): Woozalia\Ferret\Sys\Data\Engine\aux\cQDbConn->SetIt()
#1 /home/woozle/Sync/dev/local/v0.6/ferreteria/src/Sys/Data/Engine/aux/ActionRq/Admin/ToDbOper.php(88): Woozalia\Ferret\Sys\Data\Things\Array\cQStor->QryIt()
#2 /home/woozle/Sync/dev/local/v0.6/ferreteria/src/Sys/Data/Engine/aux/ActionRq/Admin/ToDbOper.php(44): Woozalia\Ferret\Sys\Data\Engine\aux\ActionRq\Admin\caToDbOper->FetchDbOper()
#3 /home/woozle/Sync/dev/local/v0.6/ferreteria/src/Sys/Data/Engine/aux/ActionRq/Admin/ToDbOper/EngDbScList.php(15): Woozalia\Ferret\Sys\Data\Engine\aux\ActionRq\Admin\caToDbOper->QDbOper()
#4 /home/woozle/Sync/dev/local/v0.6/ferreteria/apps/futils/src/Kiosk/WUIDL.php(206): Woozalia\Ferret\Sys\Data\Engine\aux\ActionRq\Admin\ToDbOper\caEngDbScList->Go()
#5 /home/woozle/Sync/dev/local/v0.6/ferreteria/src/App/Routed.php(44): Woozalia\Futil\Kiosk\caWUIDL->RunInput()
#6 /home/woozle/Sync/dev/local/v0.6/ferreteria/src/App.php(60): Woozalia\Ferret\App\caRouted->ExecuteActions()
#7 /home/woozle/Sync/dev/local/v0.6/ferreteria/src/App.php(38): Woozalia\Ferret\caApp->TryIt()
#8 /home/woozle/Sync/dev/local/v0.6/ferreteria/src/App.php(34): Woozalia\Ferret\caApp->GoDirectly()
#9 /home/woozle/Sync/dev/local/v0.6/ferreteria/boot/go.php(74): Woozalia\Ferret\caApp->Go()
#10 /home/woozle/Sync/dev/local/v0.6/ferreteria/apps/futils/run/dba/go.php(27): Woozalia\Ferret\boot\caPoinger->__construct()
#11 {main}
  thrown in /home/woozle/Sync/dev/local/v0.6/ferreteria/src/Sys/Data/Engine/aux/QDbConn.php on line 28

15:10

The immediate problem was that this line was referencing the array-element ($this->ar[$snKey]) directly, instead of via $this->GetIt(). That works for DStor classes, but not for QStor -- because each element in a QStor is a QVar wrapper for the final value, rather than the value itself.

After fixing this, the problem now is that it returns a cQDbConn where an iQDbOper is expected -- but this represents an intentional change started elsewhere, so it makes sense. It's now just a matter of updating the QDbOper expectations to QDbConn.

20:16

There was another potential problem with confusion between DbConn and DbComm. To avoid this, I'm renaming DbComm stuff to DbDatex.

Continued: 2025/10/04