guidance for using TTreeSQL ?

From: Rob Mahurin <rob_at_jlab.org>
Date: Thu, 17 Feb 2011 11:28:35 -0500


Hi,

I have some data in a mysql database. I'd like to poke around in this data using root trees. I can do this by

	$ mysql < query.sql > data.txt
	$ vim data.txt ## fixup the header line
	$ root -l
	root[] TTree *t = new TTree;
	root[] t->ReadFile("data.txt")

It looks like I should be able to use TTreeSQL:

	root[] TSQLServer* serv =
		TSQLServer::Connect("mysql://127.0.0.1/db", user, pass)
	root[] TSQLStatement* stmt = serv->Statement(
		"create temporary table data as ...")
	root[] stmt->Process()
	(Bool_t)1
	root[] TTreeSQL data(serv,"db","data")

This fails completely: data.Print() says the tree has no branches and no entries.

If I try to read a permanent table, TTreeSQL figures out its size, but none of its data:

	root[] TSQLStatement* stmt = serv->Statement(
		"create table foo as ...")
	root[] stmt->Process()
	(Bool_t)1
	root[] TTreeSQL foo(serv, "test", "foo")
	Error in <TTreeSQL::GetColumnIndice>: Error finding column 0 analyses__analyses
	root[] foo
	(class TTreeSQL)263684320
	root[] foo.Print()

******************************************************************************
*Tree :foo : Database read from table: foo *
*Entries : 172 : Total = 1287 bytes File Size = 0 *
* : : Tree compression factor = 1.00 *
******************************************************************************
*Br 0 :analyses : analyses/I *
*Entries : 172 : Total Size= 490 bytes One basket in memory *
*Baskets : 0 : Basket Size= 32000 bytes Compression= 1.00 *
*............................................................................*
*Br 1 :runlet_id : runlet_id/I *
*Entries : 172 : Total Size= 490 bytes One basket in memory *
*Baskets : 0 : Basket Size= 32000 bytes Compression= 1.00 *
*............................................................................*
root[] foo.Scan()
************************************
* Row * analyses * runlet_id *
************************************
* 0 * 0 * 0 *
* 1 * 0 * 0 *
* 2 * 0 * 0 *

Maybe I should try to fill:

	root[] foo.Fill()
	Error in <TTreeSQL::GetColumnIndice>: Error finding column 0 analyses__analyses
	Error in <TTreeSQL::GetColumnIndice>: Error finding column 0 runlet_id__runlet_id
	Error in <TTreeSQL::Fill>: CheckBranch for analyses failed
	Error in <TTreeSQL::Fill>: CheckBranch for runlet_id failed
	Error in <TTreeSQL::GetColumnIndice>: Error finding column 0 analyses__analyses
	Error in <TTreeSQL::GetColumnIndice>: Error finding column 0 runlet_id__runlet_id
	(Int_t)(-1)

I can verify from other queries that the tables are being created and filled correctly in the database. I get identical failures under root_v5.26/00 on a Linux cluster and under root_v5.28/00 on MacOS 10.5 (connecting to the same server, running mysql "5.0.77-log Source distribution"). Is TTreeSQL just broken? Or am I missing something obvious?

Thanks,
Rob

-- 
Rob Mahurin
University of Manitoba, Department of Physics
and Thomas Jefferson National Accelerator Facility
12000 Jefferson Avenue Suite 6, Newport News, VA 23606
office 757-269-6510; elsewhere 865-207-2594; rob_at_jlab.org
Received on Thu Feb 17 2011 - 17:28:50 CET

This archive was generated by hypermail 2.2.0 : Thu Feb 24 2011 - 23:50:01 CET