[Monetdb-developers] "pseudo" nested BATs

Niels Nes Niels.Nes at cwi.nl
Wed Dec 15 00:47:48 CET 2004


On Wed, Dec 15, 2004 at 12:38:24AM +0100, Stefan Manegold wrote:

use bat id's instead (stored in a oid bat for example).

niels

> Hi MonetDB developers and users,
> 
> sorry for this "blunt" posting, but I thought, the problem, respectively the
> solution/recommendation that will hopefully be initiated by this question,
> might be interesting for some more of you:
> 
> Triggered by a question from Agustin, I noticed that I (believe it or not
> ;-) apparently lack some knowledge of / experiences with MonetDB/MIL:
> 
> Consider you have a variable "a" holding a (possible transient) BAT, and
> another variable "b" holding a second BAT, which happens to be a view of the
> first one. Both BATs haven't been baptized ("rename()"), yet; hence they
> still hold there default names:
> 
> 	var a := new(void,int).seqbase(0 at 0).insert(nil,1).insert(nil,2).access(BAT_READ);
> 	var b := reverse(a);
> 	print(a);
> #-----------------#
> # h     tmp_29    # name
> # void  int       # type
> #-----------------#
> [ 0 at 0,    1       ]
> [ 1 at 0,    2       ]
> 	print(b);
> #-----------------#
> # t     tmp_29    # name
> # int   void      # type
> #-----------------#
> [ 1,      0 at 0     ]
> [ 2,      1 at 0     ]
> 
> Then, these BATs should be gathered in a "container"-BAT. Since (persistent)
> nested BATs have disappeared (for good reasons!), we do this by gathering
> the BAT's name in the container:
> 
> 	var c := new(void,str).seqbase(10 at 0);
> 	c.insert(nil,bbpname(a)).insert(nil,bbpname(b));
> 	print(c);
> #-------------------------#
> # h	tmp_28		  # name
> # void	str		  # type
> #-------------------------#
> [ 10 at 0,	  "tmp_29"	  ]
> [ 11 at 0,	  "tmp_29"	  ]
> 
> Since the second BAT is only a view of the first one, they share not only
> the same memory/storage, but also the same (bbp-)name; hence, they are not
> distinguishable by (only) their (bbp-)names, and thus the container c actually
> contains the first BAT twice iso each BAT once:
> 
> 	print(bat(fetch(c,0)));
> #-----------------#
> # h	tmp_29	  # name
> # void	int	  # type
> #-----------------#
> [ 0 at 0,	  1	  ]
> [ 1 at 0,	  2	  ]
> 	print(bat(fetch(c,1)));
> #-----------------#
> # h	tmp_29	  # name
> # void	int	  # type
> #-----------------#
> [ 0 at 0,	  1	  ]
> [ 1 at 0,	  2	  ]
> 	print(bbpname(a));
> [ "tmp_29" ]
> 	print(bbpname(b));
> [ "tmp_29" ]
> 
> Obviously, the problem can be solved/avoided by baptizing the two BATs, and
> hence making them unique "individuals":
> 
> 	rename(a,"BAT_a");
> 	rename(b,"BAT_b");
> 	print(bbpname(a));
> [ "BAT_a" ]
> 	print(bbpname(b));
> [ "BAT_b" ]
> 	c.insert(nil,bbpname(a)).insert(nil,bbpname(b));
> 	print(c);
> #-------------------------#
> # h	tmp_28		  # name
> # void	str		  # type
> #-------------------------#
> [ 10 at 0,	  "tmp_29"	  ]
> [ 11 at 0,	  "tmp_29"	  ]
> [ 12 at 0,	  "BAT_a"	  ]
> [ 13 at 0,	  "BAT_b"	  ]
> 	print(bat(fetch(c,0)));
> !ERROR: interpret_params: print(param 1): invalid BAT.
> 	print(bat(fetch(c,1)));
> !ERROR: interpret_params: print(param 1): invalid BAT.
> 	print(bat(fetch(c,2)));
> #-----------------#
> # h	BAT_b	  # name
> # void	int	  # type
> #-----------------#
> [ 0 at 0,	  1	  ]
> [ 1 at 0,	  2	  ]
> 	print(bat(fetch(c,3)));
> #-----------------#
> # t	BAT_b	  # name
> # int	void	  # type
> #-----------------#
> [ 1,	  0 at 0	  ]
> [ 2,	  1 at 0	  ]
> 
> 
> My question is now:
> 
> - Is this the only solution, or am I just not aware of another command iso
>   bbpname() that would return unique "default" name for non-renamed view?
> 
> Of course, given the fact that only MonetDB itself has control over the
> default "tmp_*" names, it is always recommendable to assign names that you
> can control yourself, whenever you use a BAT's name as its only reference...
> 
> Stefan
> 
> -- 
> | Dr. Stefan Manegold | mailto:Stefan.Manegold at cwi.nl |
> | CWI,  P.O.Box 94079 | http://www.cwi.nl/~manegold/  |
> | 1090 GB Amsterdam   | Tel.: +31 (20) 592-4212       |
> | The Netherlands     | Fax : +31 (20) 592-4312       |
> 
> 
> -------------------------------------------------------
> SF email is sponsored by - The IT Product Guide
> Read honest & candid reviews on hundreds of IT Products from real users.
> Discover which products truly live up to the hype. Start reading now. 
> http://productguide.itmanagersjournal.com/
> _______________________________________________
> Monetdb-developers mailing list
> Monetdb-developers at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/monetdb-developers

-- 

Niels Nes, Centre for Mathematics and Computer Science (CWI)
Kruislaan 413, 1098 SJ Amsterdam, The Netherlands
room C0.11,  phone ++31 20 592-4098, fax ++31 20 592-4312
url: http://www.cwi.nl/~niels   e-mail: Niels.Nes at cwi.nl




More information about the developers-list mailing list