new approach to logging database access and upgraded adodb
[openemr.git] / library / adodb / tests / test-active-relationsx.php
blobfbfddf6617f48dce7d7cace8e73c3e65b3c29dff
1 <?php
2 global $err_count;
3 $err_count = 0;
5 function found($obj, $cond)
7 $res = var_export($obj, true);
8 return (strpos($res, $cond));
11 function notfound($obj, $cond)
13 return !found($obj, $cond);
16 function ar_assert($bool)
18 global $err_count;
19 if(!$bool)
20 $err_count ++;
21 return $bool;
24 define('WEB', true);
25 function ar_echo($txt)
27 if(WEB)
28 $txt = str_replace("\n", "<br />\n", $txt);
29 echo $txt;
32 include_once('../adodb.inc.php');
33 include_once('../adodb-active-recordx.inc.php');
36 $db = NewADOConnection('mysql://root@localhost/test');
37 $db->debug=0;
38 ADOdb_Active_Record::SetDatabaseAdapter($db);
40 ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n");
41 ar_echo("Preparing database using SQL queries (creating 'people', 'children')\n");
43 $db->Execute("DROP TABLE `people`");
44 $db->Execute("DROP TABLE `children`");
45 $db->Execute("DROP TABLE `artists`");
46 $db->Execute("DROP TABLE `songs`");
48 $db->Execute("CREATE TABLE `people` (
49 `id` int(10) unsigned NOT NULL auto_increment,
50 `name_first` varchar(100) NOT NULL default '',
51 `name_last` varchar(100) NOT NULL default '',
52 `favorite_color` varchar(100) NOT NULL default '',
53 PRIMARY KEY (`id`)
54 ) ENGINE=MyISAM;
55 ");
56 $db->Execute("CREATE TABLE `children` (
57 `person_id` int(10) unsigned NOT NULL,
58 `name_first` varchar(100) NOT NULL default '',
59 `name_last` varchar(100) NOT NULL default '',
60 `favorite_pet` varchar(100) NOT NULL default '',
61 `id` int(10) unsigned NOT NULL auto_increment,
62 PRIMARY KEY (`id`)
63 ) ENGINE=MyISAM;
64 ");
66 $db->Execute("CREATE TABLE `artists` (
67 `name` varchar(100) NOT NULL default '',
68 `artistuniqueid` int(10) unsigned NOT NULL auto_increment,
69 PRIMARY KEY (`artistuniqueid`)
70 ) ENGINE=MyISAM;
71 ");
73 $db->Execute("CREATE TABLE `songs` (
74 `name` varchar(100) NOT NULL default '',
75 `artistid` int(10) NOT NULL,
76 `recordid` int(10) unsigned NOT NULL auto_increment,
77 PRIMARY KEY (`recordid`)
78 ) ENGINE=MyISAM;
79 ");
81 $db->Execute("insert into children (person_id,name_first,name_last,favorite_pet) values (1,'Jill','Lim','tortoise')");
82 $db->Execute("insert into children (person_id,name_first,name_last) values (1,'Joan','Lim')");
83 $db->Execute("insert into children (person_id,name_first,name_last) values (1,'JAMIE','Lim')");
85 $db->Execute("insert into artists (artistuniqueid, name) values(1,'Elvis Costello')");
86 $db->Execute("insert into songs (recordid, name, artistid) values(1,'No Hiding Place', 1)");
87 $db->Execute("insert into songs (recordid, name, artistid) values(2,'American Gangster Time', 1)");
89 // This class _implicitely_ relies on the 'people' table (pluralized form of 'person')
90 class Person extends ADOdb_Active_Record
92 function __construct()
94 parent::__construct();
95 $this->hasMany('children');
98 // This class _implicitely_ relies on the 'children' table
99 class Child extends ADOdb_Active_Record
101 function __construct()
103 parent::__construct();
104 $this->belongsTo('person');
107 // This class _explicitely_ relies on the 'children' table and shares its metadata with Child
108 class Kid extends ADOdb_Active_Record
110 function __construct()
112 parent::__construct('children');
113 $this->belongsTo('person');
116 // This class _explicitely_ relies on the 'children' table but does not share its metadata
117 class Rugrat extends ADOdb_Active_Record
119 function __construct()
121 parent::__construct('children', false, false, array('new' => true));
125 class Artist extends ADOdb_Active_Record
127 function __construct()
129 parent::__construct('artists', array('artistuniqueid'));
130 $this->hasMany('songs', 'artistid');
133 class Song extends ADOdb_Active_Record
135 function __construct()
137 parent::__construct('songs', array('recordid'));
138 $this->belongsTo('artist', 'artistid');
142 ar_echo("Inserting person in 'people' table ('John Lim, he likes lavender')\n");
143 ar_echo("-------------------------------------------------------------------------------------------------------------------\n");
144 $person = new Person();
145 $person->name_first = 'John';
146 $person->name_last = 'Lim';
147 $person->favorite_color = 'lavender';
148 $person->save(); // this save will perform an INSERT successfully
150 $person = new Person();
151 $person->name_first = 'Lady';
152 $person->name_last = 'Cat';
153 $person->favorite_color = 'green';
154 $person->save();
156 $child = new Child();
157 $child->name_first = 'Fluffy';
158 $child->name_last = 'Cat';
159 $child->favorite_pet = 'Cat Lady';
160 $child->person_id = $person->id;
161 $child->save();
163 $child = new Child();
164 $child->name_first = 'Sun';
165 $child->name_last = 'Cat';
166 $child->favorite_pet = 'Cat Lady';
167 $child->person_id = $person->id;
168 $child->save();
170 $err_count = 0;
172 ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n");
173 ar_echo("person->Find('id=1') [Lazy Method]\n");
174 ar_echo("person is loaded but its children will be loaded on-demand later on\n");
175 ar_echo("-------------------------------------------------------------------------------------------------------------------\n");
176 $person = new Person();
177 $people = $person->Find('id=1');
178 ar_echo((ar_assert(found($people, "'name_first' => 'John'"))) ? "[OK] Found John\n" : "[!!] Find failed\n");
179 ar_echo((ar_assert(notfound($people, "'favorite_pet' => 'tortoise'"))) ? "[OK] No relation yet\n" : "[!!] Found relation when I shouldn't\n");
180 ar_echo("\n-- Lazily Loading Children:\n\n");
181 foreach($people as $aperson)
183 foreach($aperson->children as $achild)
185 if($achild->name_first);
188 ar_echo((ar_assert(found($people, "'favorite_pet' => 'tortoise'"))) ? "[OK] Found relation: child\n" : "[!!] Missing relation: child\n");
189 ar_echo((ar_assert(found($people, "'name_first' => 'Joan'"))) ? "[OK] Found Joan\n" : "[!!] Find failed\n");
190 ar_echo((ar_assert(found($people, "'name_first' => 'JAMIE'"))) ? "[OK] Found JAMIE\n" : "[!!] Find failed\n");
192 ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n");
193 ar_echo("person->Find('id=1' ... ADODB_WORK_AR) [Worker Method]\n");
194 ar_echo("person is loaded, and so are its children\n");
195 ar_echo("-------------------------------------------------------------------------------------------------------------------\n");
196 $person = new Person();
197 $people = $person->Find('id=1', false, false, array('loading' => ADODB_WORK_AR));
198 ar_echo((ar_assert(found($people, "'name_first' => 'John'"))) ? "[OK] Found John\n" : "[!!] Find failed\n");
199 ar_echo((ar_assert(found($people, "'favorite_pet' => 'tortoise'"))) ? "[OK] Found relation: child\n" : "[!!] Missing relation: child\n");
200 ar_echo((ar_assert(found($people, "'name_first' => 'Joan'"))) ? "[OK] Found Joan\n" : "[!!] Find failed\n");
201 ar_echo((ar_assert(found($people, "'name_first' => 'JAMIE'"))) ? "[OK] Found JAMIE\n" : "[!!] Find failed\n");
203 ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n");
204 ar_echo("person->Find('id=1' ... ADODB_JOIN_AR) [Join Method]\n");
205 ar_echo("person and its children are loaded using a single query\n");
206 ar_echo("-------------------------------------------------------------------------------------------------------------------\n");
207 $person = new Person();
208 // When I specifically ask for a join, I have to specify which table id I am looking up
209 // otherwise the SQL parser will wonder which table's id that would be.
210 $people = $person->Find('people.id=1', false, false, array('loading' => ADODB_JOIN_AR));
211 ar_echo((ar_assert(found($people, "'name_first' => 'John'"))) ? "[OK] Found John\n" : "[!!] Find failed\n");
212 ar_echo((ar_assert(found($people, "'favorite_pet' => 'tortoise'"))) ? "[OK] Found relation: child\n" : "[!!] Missing relation: child\n");
213 ar_echo((ar_assert(found($people, "'name_first' => 'Joan'"))) ? "[OK] Found Joan\n" : "[!!] Find failed\n");
214 ar_echo((ar_assert(found($people, "'name_first' => 'JAMIE'"))) ? "[OK] Found JAMIE\n" : "[!!] Find failed\n");
216 ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n");
217 ar_echo("person->Load('people.id=1') [Join Method]\n");
218 ar_echo("Load() always uses the join method since it returns only one row\n");
219 ar_echo("-------------------------------------------------------------------------------------------------------------------\n");
220 $person = new Person();
221 // Under the hood, Load(), since it returns only one row, always perform a join
222 // Therefore we need to clarify which id we are talking about.
223 $person->Load('people.id=1');
224 ar_echo((ar_assert(found($person, "'name_first' => 'John'"))) ? "[OK] Found John\n" : "[!!] Find failed\n");
225 ar_echo((ar_assert(found($person, "'favorite_pet' => 'tortoise'"))) ? "[OK] Found relation: child\n" : "[!!] Missing relation: child\n");
226 ar_echo((ar_assert(found($person, "'name_first' => 'Joan'"))) ? "[OK] Found Joan\n" : "[!!] Find failed\n");
227 ar_echo((ar_assert(found($person, "'name_first' => 'JAMIE'"))) ? "[OK] Found JAMIE\n" : "[!!] Find failed\n");
229 ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n");
230 ar_echo("child->Load('children.id=1') [Join Method]\n");
231 ar_echo("We are now loading from the 'children' table, not from 'people'\n");
232 ar_echo("-------------------------------------------------------------------------------------------------------------------\n");
233 $child = new Child();
234 $child->Load('children.id=1');
235 ar_echo((ar_assert(found($child, "'name_first' => 'Jill'"))) ? "[OK] Found Jill\n" : "[!!] Find failed\n");
236 ar_echo((ar_assert(found($child, "'favorite_color' => 'lavender'"))) ? "[OK] Found relation: person\n" : "[!!] Missing relation: person\n");
238 ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n");
239 ar_echo("child->Find('children.id=1' ... ADODB_WORK_AR) [Worker Method]\n");
240 ar_echo("-------------------------------------------------------------------------------------------------------------------\n");
241 $child = new Child();
242 $children = $child->Find('id=1', false, false, array('loading' => ADODB_WORK_AR));
243 ar_echo((ar_assert(found($children, "'name_first' => 'Jill'"))) ? "[OK] Found Jill\n" : "[!!] Find failed\n");
244 ar_echo((ar_assert(found($children, "'favorite_color' => 'lavender'"))) ? "[OK] Found relation: person\n" : "[!!] Missing relation: person\n");
245 ar_echo((ar_assert(notfound($children, "'name_first' => 'Joan'"))) ? "[OK] No Joan relation\n" : "[!!] Find failed\n");
246 ar_echo((ar_assert(notfound($children, "'name_first' => 'JAMIE'"))) ? "[OK] No JAMIE relation\n" : "[!!] Find failed\n");
248 ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n");
249 ar_echo("kid->Find('children.id=1' ... ADODB_WORK_AR) [Worker Method]\n");
250 ar_echo("Where we see that kid shares relationships with child because they are stored\n");
251 ar_echo("in the common table's metadata structure.\n");
252 ar_echo("-------------------------------------------------------------------------------------------------------------------\n");
253 $kid = new Kid('children');
254 $kids = $kid->Find('children.id=1', false, false, array('loading' => ADODB_WORK_AR));
255 ar_echo((ar_assert(found($kids, "'name_first' => 'Jill'"))) ? "[OK] Found Jill\n" : "[!!] Find failed\n");
256 ar_echo((ar_assert(found($kids, "'favorite_color' => 'lavender'"))) ? "[OK] Found relation: person\n" : "[!!] Missing relation: person\n");
257 ar_echo((ar_assert(notfound($kids, "'name_first' => 'Joan'"))) ? "[OK] No Joan relation\n" : "[!!] Find failed\n");
258 ar_echo((ar_assert(notfound($kids, "'name_first' => 'JAMIE'"))) ? "[OK] No JAMIE relation\n" : "[!!] Find failed\n");
260 ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n");
261 ar_echo("kid->Find('children.id=1' ... ADODB_LAZY_AR) [Lazy Method]\n");
262 ar_echo("Of course, lazy loading also retrieve medata information...\n");
263 ar_echo("-------------------------------------------------------------------------------------------------------------------\n");
264 $kid = new Kid('children');
265 $kids = $kid->Find('children.id=1', false, false, array('loading' => ADODB_LAZY_AR));
266 ar_echo((ar_assert(found($kids, "'name_first' => 'Jill'"))) ? "[OK] Found Jill\n" : "[!!] Find failed\n");
267 ar_echo((ar_assert(notfound($kids, "'favorite_color' => 'lavender'"))) ? "[OK] No relation yet\n" : "[!!] Found relation when I shouldn't\n");
268 ar_echo("\n-- Lazily Loading People:\n\n");
269 foreach($kids as $akid)
271 if($akid->person);
273 ar_echo((ar_assert(found($kids, "'favorite_color' => 'lavender'"))) ? "[OK] Found relation: person\n" : "[!!] Missing relation: person\n");
274 ar_echo((ar_assert(notfound($kids, "'name_first' => 'Joan'"))) ? "[OK] No Joan relation\n" : "[!!] Found relation when I shouldn't\n");
275 ar_echo((ar_assert(notfound($kids, "'name_first' => 'JAMIE'"))) ? "[OK] No JAMIE relation\n" : "[!!] Found relation when I shouldn't\n");
277 ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n");
278 ar_echo("rugrat->Find('children.id=1' ... ADODB_WORK_AR) [Worker Method]\n");
279 ar_echo("In rugrat's constructor it is specified that\nit must forget any existing relation\n");
280 ar_echo("-------------------------------------------------------------------------------------------------------------------\n");
281 $rugrat = new Rugrat('children');
282 $rugrats = $rugrat->Find('children.id=1', false, false, array('loading' => ADODB_WORK_AR));
283 ar_echo((ar_assert(found($rugrats, "'name_first' => 'Jill'"))) ? "[OK] Found Jill\n" : "[!!] Find failed\n");
284 ar_echo((ar_assert(notfound($rugrats, "'favorite_color' => 'lavender'"))) ? "[OK] No relation found\n" : "[!!] Found relation when I shouldn't\n");
285 ar_echo((ar_assert(notfound($rugrats, "'name_first' => 'Joan'"))) ? "[OK] No Joan relation\n" : "[!!] Found relation when I shouldn't\n");
286 ar_echo((ar_assert(notfound($rugrats, "'name_first' => 'JAMIE'"))) ? "[OK] No JAMIE relation\n" : "[!!] Found relation when I shouldn't\n");
288 ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n");
289 ar_echo("kid->Find('children.id=1' ... ADODB_WORK_AR) [Worker Method]\n");
290 ar_echo("Note how only rugrat forgot its relations - kid is fine.\n");
291 ar_echo("-------------------------------------------------------------------------------------------------------------------\n");
292 $kid = new Kid('children');
293 $kids = $kid->Find('children.id=1', false, false, array('loading' => ADODB_WORK_AR));
294 ar_echo((ar_assert(found($kids, "'name_first' => 'Jill'"))) ? "[OK] Found Jill\n" : "[!!] Find failed\n");
295 ar_echo((ar_assert(found($kids, "'favorite_color' => 'lavender'"))) ? "[OK] I did not forget relation: person\n" : "[!!] I should not have forgotten relation: person\n");
296 ar_echo((ar_assert(notfound($kids, "'name_first' => 'Joan'"))) ? "[OK] No Joan relation\n" : "[!!] Found relation when I shouldn't\n");
297 ar_echo((ar_assert(notfound($kids, "'name_first' => 'JAMIE'"))) ? "[OK] No JAMIE relation\n" : "[!!] Found relation when I shouldn't\n");
299 ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n");
300 ar_echo("rugrat->Find('children.id=1' ... ADODB_WORK_AR) [Worker Method]\n");
301 ar_echo("-------------------------------------------------------------------------------------------------------------------\n");
302 $rugrat = new Rugrat('children');
303 $rugrats = $rugrat->Find('children.id=1', false, false, array('loading' => ADODB_WORK_AR));
304 $arugrat = $rugrats[0];
305 ar_echo((ar_assert(found($arugrat, "'name_first' => 'Jill'"))) ? "[OK] Found Jill\n" : "[!!] Find failed\n");
306 ar_echo((ar_assert(notfound($arugrat, "'favorite_color' => 'lavender'"))) ? "[OK] No relation yet\n" : "[!!] Found relation when I shouldn't\n");
308 ar_echo("\n-- Loading relations:\n\n");
309 $arugrat->belongsTo('person');
310 $arugrat->LoadRelations('person', 'order by id', 0, 2);
311 ar_echo((ar_assert(found($arugrat, "'favorite_color' => 'lavender'"))) ? "[OK] Found relation: person\n" : "[!!] Missing relation: person\n");
312 ar_echo((ar_assert(found($arugrat, "'name_first' => 'Jill'"))) ? "[OK] Found Jill\n" : "[!!] Find failed\n");
313 ar_echo((ar_assert(notfound($arugrat, "'name_first' => 'Joan'"))) ? "[OK] No Joan relation\n" : "[!!] Found relation when I shouldn't\n");
314 ar_echo((ar_assert(notfound($arugrat, "'name_first' => 'JAMIE'"))) ? "[OK] No Joan relation\n" : "[!!] Found relation when I shouldn't\n");
316 ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n");
317 ar_echo("person->Find('1=1') [Lazy Method]\n");
318 ar_echo("And now for our finale...\n");
319 ar_echo("-------------------------------------------------------------------------------------------------------------------\n");
320 $person = new Person();
321 $people = $person->Find('1=1', false, false, array('loading' => ADODB_LAZY_AR));
322 ar_echo((ar_assert(found($people, "'name_first' => 'John'"))) ? "[OK] Found John\n" : "[!!] Find failed\n");
323 ar_echo((ar_assert(notfound($people, "'favorite_pet' => 'tortoise'"))) ? "[OK] No relation yet\n" : "[!!] Found relation when I shouldn't\n");
324 ar_echo((ar_assert(notfound($people, "'name_first' => 'Fluffy'"))) ? "[OK] No Fluffy yet\n" : "[!!] Found Fluffy relation when I shouldn't\n");
325 ar_echo("\n-- Lazily Loading Everybody:\n\n");
326 foreach($people as $aperson)
328 foreach($aperson->children as $achild)
330 if($achild->name_first);
333 ar_echo((ar_assert(found($people, "'favorite_pet' => 'tortoise'"))) ? "[OK] Found relation: child\n" : "[!!] Missing relation: child\n");
334 ar_echo((ar_assert(found($people, "'name_first' => 'Joan'"))) ? "[OK] Found Joan\n" : "[!!] Find failed\n");
335 ar_echo((ar_assert(found($people, "'name_first' => 'JAMIE'"))) ? "[OK] Found JAMIE\n" : "[!!] Find failed\n");
336 ar_echo((ar_assert(found($people, "'name_first' => 'Lady'"))) ? "[OK] Found Cat Lady\n" : "[!!] Find failed\n");
337 ar_echo((ar_assert(found($people, "'name_first' => 'Fluffy'"))) ? "[OK] Found Fluffy\n" : "[!!] Find failed\n");
338 ar_echo((ar_assert(found($people, "'name_first' => 'Sun'"))) ? "[OK] Found Sun\n" : "[!!] Find failed\n");
340 ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n");
341 ar_echo("artist->Load('artistuniqueid=1') [Join Method]\n");
342 ar_echo("Yes, we are dabbling in the musical field now..\n");
343 ar_echo("-------------------------------------------------------------------------------------------------------------------\n");
344 $artist = new Artist();
345 $artist->Load('artistuniqueid=1');
346 ar_echo((ar_assert(found($artist, "'name' => 'Elvis Costello'"))) ? "[OK] Found Elvis Costello\n" : "[!!] Find failed\n");
347 ar_echo((ar_assert(found($artist, "'name' => 'No Hiding Place'"))) ? "[OK] Found relation: song\n" : "[!!] Missing relation: song\n");
350 ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n");
351 ar_echo("song->Load('recordid=1') [Join Method]\n");
352 ar_echo("-------------------------------------------------------------------------------------------------------------------\n");
353 $song = new Song();
354 $song->Load('recordid=1');
355 ar_echo((ar_assert(found($song, "'name' => 'No Hiding Place'"))) ? "[OK] Found song\n" : "[!!] Find failed\n");
357 ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n");
358 ar_echo("artist->Find('artistuniqueid=1' ... ADODB_JOIN_AR) [Join Method]\n");
359 ar_echo("-------------------------------------------------------------------------------------------------------------------\n");
360 $artist = new Artist();
361 $artists = $artist->Find('artistuniqueid=1', false, false, array('loading' => ADODB_JOIN_AR));
362 ar_echo((ar_assert(found($artists, "'name' => 'Elvis Costello'"))) ? "[OK] Found Elvis Costello\n" : "[!!] Find failed\n");
363 ar_echo((ar_assert(found($artists, "'name' => 'No Hiding Place'"))) ? "[OK] Found relation: song\n" : "[!!] Missing relation: song\n");
365 ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n");
366 ar_echo("song->Find('recordid=1' ... ADODB_JOIN_AR) [Join Method]\n");
367 ar_echo("-------------------------------------------------------------------------------------------------------------------\n");
368 $song = new Song();
369 $songs = $song->Find('recordid=1', false, false, array('loading' => ADODB_JOIN_AR));
370 ar_echo((ar_assert(found($songs, "'name' => 'No Hiding Place'"))) ? "[OK] Found song\n" : "[!!] Find failed\n");
372 ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n");
373 ar_echo("artist->Find('artistuniqueid=1' ... ADODB_WORK_AR) [Work Method]\n");
374 ar_echo("-------------------------------------------------------------------------------------------------------------------\n");
375 $artist = new Artist();
376 $artists = $artist->Find('artistuniqueid=1', false, false, array('loading' => ADODB_WORK_AR));
377 ar_echo((ar_assert(found($artists, "'name' => 'Elvis Costello'"))) ? "[OK] Found Elvis Costello\n" : "[!!] Find failed\n");
378 ar_echo((ar_assert(found($artists, "'name' => 'No Hiding Place'"))) ? "[OK] Found relation: song\n" : "[!!] Missing relation: song\n");
380 ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n");
381 ar_echo("song->Find('recordid=1' ... ADODB_JOIN_AR) [Join Method]\n");
382 ar_echo("-------------------------------------------------------------------------------------------------------------------\n");
383 $song = new Song();
384 $songs = $song->Find('recordid=1', false, false, array('loading' => ADODB_WORK_AR));
385 ar_echo((ar_assert(found($songs, "'name' => 'No Hiding Place'"))) ? "[OK] Found song\n" : "[!!] Find failed\n");
387 ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n");
388 ar_echo("artist->Find('artistuniqueid=1' ... ADODB_LAZY_AR) [Lazy Method]\n");
389 ar_echo("-------------------------------------------------------------------------------------------------------------------\n");
390 $artist = new Artist();
391 $artists = $artist->Find('artistuniqueid=1', false, false, array('loading' => ADODB_LAZY_AR));
392 ar_echo((ar_assert(found($artists, "'name' => 'Elvis Costello'"))) ? "[OK] Found Elvis Costello\n" : "[!!] Find failed\n");
393 ar_echo((ar_assert(notfound($artists, "'name' => 'No Hiding Place'"))) ? "[OK] No relation yet\n" : "[!!] Found relation when I shouldn't\n");
394 foreach($artists as $anartist)
396 foreach($anartist->songs as $asong)
398 if($asong->name);
401 ar_echo((ar_assert(found($artists, "'name' => 'No Hiding Place'"))) ? "[OK] Found relation: song\n" : "[!!] Missing relation: song\n");
403 ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n");
404 ar_echo("song->Find('recordid=1' ... ADODB_LAZY_AR) [Lazy Method]\n");
405 ar_echo("-------------------------------------------------------------------------------------------------------------------\n");
406 $song = new Song();
407 $songs = $song->Find('recordid=1', false, false, array('loading' => ADODB_LAZY_AR));
408 ar_echo((ar_assert(found($songs, "'name' => 'No Hiding Place'"))) ? "[OK] Found song\n" : "[!!] Find failed\n");
409 ar_echo((ar_assert(notfound($songs, "'name' => 'Elvis Costello'"))) ? "[OK] No relation yet\n" : "[!!] Found relation when I shouldn't\n");
410 foreach($songs as $asong)
412 if($asong->artist);
414 ar_echo((ar_assert(found($songs, "'name' => 'Elvis Costello'"))) ? "[OK] Found relation: artist\n" : "[!!] Missing relation: artist\n");
416 ar_echo("\n\n-------------------------------------------------------------------------------------------------------------------\n");
417 ar_echo("Test suite complete. " . (($err_count > 0) ? "$err_count errors found.\n" : "Success.\n"));
418 ar_echo("-------------------------------------------------------------------------------------------------------------------\n");