2025/10/03: Difference between revisions
(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
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]);
- Keyed.php line 51:
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