PEAR_ERROR [SOLVED]

Archived from the Xataface Users forum.

cantlep — Wed Sep 22, 2010 3:15 am

Hiya,

I really hope this isn’t because of the Xataface arithmetic issues…but… I have this sql in my table delegate class

Code: Select all
function __sql__() { return "ContractData.ContractSupplier1, (ContractData.ContractSupplier1DayRate * MPANData.DayCons) AS Test_Total FROM ContractData inner join MPANData_ContractData ON ContractData.ContractDataID = MPANData_ContractData.ContractDataID inner join MPANData ON MPANData_ContractData.MPANCore = MPANData.MPANCore"; }

which returns fine on the CLI

Code: Select all
+---------------------+------------+ | ContractSupplier1   | Test_Total | +---------------------+------------+ | Scottish & Southern |  150000000 | +---------------------+------------+

but just shows a blank web page. Here’s the error from the web logs.

Code: Select all
[Wed Sep 22 11:19:18 2010] [error] [client 10.0.10.51] PHP Fatal error:  Cannot use object of type PEAR_Error as array in /var/www/html/public/dataface/Dataface/Table.php on line 2044, referer: http://www.site.org.uk/index.php

Any ideas?


cantlep — Fri Sep 24, 2010 2:13 am

Hi Steve,

if this is an arithmetic issue that you’re already aware of..is there anyway I can make it a view that I can use?

Thanks

Paul


cantlep — Fri Sep 24, 2010 5:53 am

OK, getting a bit further, I put in some debugging into Table.php (found from another issue in another post) and that highlighted a syntax error (which is now fixed).

Now I have the following code

Code: Select all
return "select (ContractSupplier1DayRate*MPANData.DayCons) AS Supplier1DayCostEst FROM ContractData inner join MPANData_ContractData ON ContractDataID = MPANData_ContractData.ContractDataID inner join MPANData ON MPANData_ContractData.MPANCore = MPANData.MPANCore";

I’ve stripped out a lot of it to make it easier to read.

It looks like I’m in a kind of “catch 22” scenario. If I use the table name within the delegate class - like this:

Code: Select all
FROM ContractData inner join MPANData_ContractData ON ContractData.ContractDataID = MPANData_ContractData.ContractDataID inner join MPANData ON MPANData_ContractData.MPANCore = MPANData.MPANCore";

I get an error like this (in the browser)

Code: Select all
Error: Could not load current record: Unknown column 'ContractData.ContractDataID' in 'field list' SELECT length(`ContractData`.`Supplier1NightCostEst`) as blah blah blah

if I have this in the delegate class (i.e. ContractDataID specified *without* the tablename)

Code: Select all
FROM ContractData inner join MPANData_ContractData ON ContractDataID = MPANData_ContractData.ContractDataID inner join MPANData ON MPANData_ContractData.MPANCore = MPANData.MPANCore";
Code: Select all
PHP Fatal error:  Column 'ContractDataID' in on clause is ambiguous

Which is what happens on the CLI too.
Any ideas?

Cheers


cantlep — Fri Sep 24, 2010 7:48 am

Sorted with this. (now I know why we have to alias the tables in the delegate classes ) Always learning…sorry for the load of posts.

Code: Select all
`return “select c., (c.ContractSupplier1DayRatem.DayCons) AS Supplier1DayCostEst
, (c.ContractSupplier1NightRate * m.NightCons) AS Supplier1NightCostEst
, (c.ContractSupplier1AddRate1 * m.AddCons1) AS Supplier1AddRate1CostEst
, (c.ContractSupplier1AddRate2 * m.AddCons2) AS Supplier1AddRate2CostEst
, (c.ContractSupplier1AddRate3 * m.AddCons3) AS Supplier1AddRate3CostEst
, (c.ContractSupplier1AddRate4 * m.AddCons4) AS Supplier1AddRate4CostEst
, (c.ContractSupplier1AddRate5 * m.AddCons5) AS Supplier1AddRate5CostEst
, (c.ContractSupplier1AddRate6 * m.AddCons6) AS Supplier1AddRate6CostEst
, (c.ContractSupplier1AddRate7 * m.AddCons7) AS Supplier1AddRate7CostEst
, (c.ContractSupplier1AddRate8 * m.AddCons8) AS Supplier1AddRate8CostEst
, (c.ContractSupplier1DayRate * m.DayCons)
  • (c.ContractSupplier1NightRate * m.NightCons)
  • (c.ContractSupplier1AddRate1 * m.AddCons1)
  • (c.ContractSupplier1AddRate2 * m.AddCons2)
  • (c.ContractSupplier1AddRate3 * m.AddCons3)
  • (c.ContractSupplier1AddRate4 * m.AddCons4)
  • (c.ContractSupplier1AddRate5 * m.AddCons5)
  • (c.ContractSupplier1AddRate6 * m.AddCons6)
  • (c.ContractSupplier1AddRate7 * m.AddCons7)
  • (c.ContractSupplier1AddRate8 * m.AddCons8) AS Supplier1TotalCostEst
    FROM ContractData c
    inner join MPANData_ContractData mc ON c.ContractDataID = mc.ContractDataID
    inner join MPANData m ON mc.MPANCore = m.MPANCore”;`