"1", "name"=>"driver_test" ); if(file_exists("driver_test_config.php")) include("driver_test_config.php"); $eol=(IsSet($driver_arguments["LogLineBreak"]) ? $driver_arguments["LogLineBreak"] : "\n"); $default_tests=array( "storage"=>1, "bulkfetch"=>1, "preparedqueries"=>1, "metadata"=>1, "nulls"=>1, "escapesequences"=>1, "ranges"=>1, "sequences"=>1, "affectedrows"=>1, "transactions"=>1, "replace"=>1, "lobstorage"=>1, "lobfiles"=>1, "lobnulls"=>1 ); if($argc<=1) $tests=$default_tests; else { for($tests=array(),$argument=1;$argument<$argc;$argument++) { if(!IsSet($default_tests[$argv[$argument]])) { echo "Usage: ",$argv[0]; for(Reset($default_tests);Key($default_tests);Next($default_tests)) echo " [",Key($default_tests),"]"; echo $eol; exit; } $tests[$argv[$argument]]=$default_tests[$argv[$argument]]; } } set_time_limit(0); $input_file="driver_test.schema"; $manager=new metabase_manager_class; $success=$manager->UpdateDatabase($input_file,$input_file.".before",$driver_arguments,$database_variables); $debug_output=""; if(count($manager->warnings)>0) $debug_output.="WARNING:$eol".implode($manager->warnings,"!$eol").$eol; if($manager->database && IsSet($driver_arguments["CaptureDebug"])) $debug_output.=MetabaseDebugOutput($manager->database); $passed=$failed=0; if($success) { if(!strcmp($error=MetabaseSetupDatabase($driver_arguments,$database),"")) { if(IsSet($driver_arguments["CaptureDebug"])) MetabaseCaptureDebugOutput($database,1); MetabaseSetDatabase($database,$database_variables["name"]); if(IsSet($tests["storage"]) && $success) { $test="storage"; echo "Testing typed field storage and retrieval ... "; flush(); $pass=1; if(!MetabaseQuery($database,"DELETE FROM users")) $success=0; else { $row=1234; $data=array(); $data["user_name"]="user_$row"; $data["user_password"]="somepassword"; $data["subscribed"]=$row % 2; $data["user_id"]=$row; $data["quota"]=strval($row/100); $data["weight"]=sqrt($row); $data["access_date"]=MetabaseToday(); $data["access_time"]=MetabaseTime(); $data["approved"]=MetabaseNow(); if(($prepared_query=MetabasePrepareQuery($database,"INSERT INTO users (user_name,user_password,subscribed,user_id,quota,weight,access_date,access_time,approved) VALUES (?,?,?,?,?,?,?,?,?)"))) { if(!InsertTestValues($database,$prepared_query,$data)) { $success=0; } MetabaseFreePreparedQuery($database,$prepared_query); if($success) { if(!($result=MetabaseQuery($database,"SELECT user_name,user_password,subscribed,user_id,quota,weight,access_date,access_time,approved FROM users"))) $success=0; else { if(VerifyFetchedValues($database,$result,0,$data,$value,$field)) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: the value retrieved for field \"$field\" ($value) doesn't match what was stored (".$data[$field].")$eol"; } else { if(!MetabaseEndOfResult($database,$result)) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: the query result did not seem to have reached the end of result as expected$eol"; } } MetabaseFreeResult($database,$result); } } if($success && $pass) { $passed++; echo "OK.$eol"; } } else $success=0; } } if(IsSet($tests["bulkfetch"]) && $success) { $test="bulkfetch"; echo "Testing query result data bulk fetching... "; flush(); $pass=1; if(!MetabaseQuery($database,"DELETE FROM users")) $success=0; else { if(($prepared_query=MetabasePrepareQuery($database,"INSERT INTO users (user_name,user_password,subscribed,user_id,quota,weight,access_date,access_time,approved) VALUES (?,?,?,?,?,?,?,?,?)"))) { $data=array(); for($total_rows=5,$row=0;$row<$total_rows;$row++) { $data[$row]["user_name"]="user_$row"; $data[$row]["user_password"]="somepassword"; $data[$row]["subscribed"]=$row % 2; $data[$row]["user_id"]=$row; $data[$row]["quota"]=sprintf("%.2f",strval(1+($row+1)/100)); $data[$row]["weight"]=sqrt($row); $data[$row]["access_date"]=MetabaseToday(); $data[$row]["access_time"]=MetabaseTime(); $data[$row]["approved"]=MetabaseNow(); if(!InsertTestValues($database,$prepared_query,$data[$row])) { $success=0; break; } } MetabaseFreePreparedQuery($database,$prepared_query); $types=array( "text", "text", "boolean", "integer", "decimal", "float", "date", "time", "timestamp" ); if($success) { for($row=0;$row<$total_rows;$row++) { for(Reset($data[$row]),$column=0;$column0) $fields.=","; $fields.=Key($data[0]); } for($row=0;$row<$total_rows;$row++) { if(!($success=MetabaseQueryRow($database,"SELECT $fields FROM users WHERE user_id=$row",$value,$types))) break; for(Reset($data[$row]),$column=0;$column0) $fields.=","; $fields.=Key($data[0]); } if(($success=MetabaseQueryAll($database,"SELECT $fields FROM users ORDER BY user_id",$value,$types))) { for($row=0;$row<$total_rows;$row++) { for(Reset($data[$row]),$column=0;$column$rows) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: expected a result of no more than $rows but the returned number of rows is $result_rows"; } else { for($row=0;$row<$result_rows;$row++) { if(MetabaseEndOfResult($database,$result)) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: the query result seem to have reached the end of result at row $row that is before $result_rows as expected$eol"; break; } if(VerifyFetchedValues($database,$result,$row,$data[$row+$start_row],$value,$field)) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: the value retrieved from row ".($row+$start_row)." for field \"$field\" ($value) doesn't match what was stored (".$data[$row+$start_row][$field].")$eol"; break; } } } if($pass) { if(!MetabaseEndOfResult($database,$result)) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: the query result did not seem to have reached the end of result as expected$eol"; } } MetabaseFreeResult($database,$result); } } } if($success && $pass) { $passed++; echo "OK.$eol"; } } else $success=0; } } else echo "Selecting rows ranges is not supported.$eol"; } if(IsSet($tests["sequences"]) && $success) { if(MetabaseSupport($database,"Sequences")) { $test="sequences"; echo "Testing sequences... "; flush(); $pass=1; for($start_value=1;$success && $pass && $start_value<4;$start_value++) { $sequence_name="test_sequence_$start_value"; MetabaseDropSequence($database,$sequence_name); if(($success=MetabaseCreateSequence($database,$sequence_name,$start_value))) { for($sequence_value=$start_value;$sequence_value<$start_value+4;$sequence_value++) { if(!($success=MetabaseGetSequenceNextValue($database,$sequence_name,$value))) break; if($value!=$sequence_value) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: the returned sequence value is $value and not $sequence_value as expected with sequence start value with $start_value$eol"; break; } } if(!$success) $error=MetabaseError($database); if(!MetabaseDropSequence($database,$sequence_name)) { if(!$success) $error.=" - "; $error.=MetabaseError($database); $success=0; } } } if($success && $pass) { $passed++; echo "OK.$eol"; } } else echo "Sequences are not supported.$eol"; } if(IsSet($tests["replace"]) && $success) { if(MetabaseSupport($database,"Replace")) { $test="sequences"; echo "Testing the replace query... "; flush(); $pass=1; if(!MetabaseQuery($database,"DELETE FROM users")) $success=0; else { $row=1234; $data=array(); $data["user_name"]="user_$row"; $data["user_password"]="somepassword"; $data["subscribed"]=$row % 2; $data["user_id"]=$row; $data["quota"]=strval($row/100); $data["weight"]=sqrt($row); $data["access_date"]=MetabaseToday(); $data["access_time"]=MetabaseTime(); $data["approved"]=MetabaseNow(); $fields=array( "user_name"=>array( "Value"=>"user_$row", "Type"=>"text" ), "user_password"=>array( "Value"=>$data["user_password"], "Type"=>"text" ), "subscribed"=>array( "Value"=>$data["subscribed"], "Type"=>"boolean" ), "user_id"=>array( "Value"=>$data["user_id"], "Type"=>"integer", "Key"=>1 ), "quota"=>array( "Value"=>$data["quota"], "Type"=>"decimal" ), "weight"=>array( "Value"=>$data["weight"], "Type"=>"float" ), "access_date"=>array( "Value"=>$data["access_date"], "Type"=>"date" ), "access_time"=>array( "Value"=>$data["access_time"], "Type"=>"time" ), "approved"=>array( "Value"=>$data["approved"], "Type"=>"timestamp" ) ); $support_affected_rows=MetabaseSupport($database,"AffectedRows"); if(($success=MetabaseReplace($database,"users",$fields)) && (!$support_affected_rows || ($success=MetabaseAffectedRows($database,$affected_rows)))) { if($support_affected_rows && $affected_rows!=1) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: replacing a row in an empty table returned $affected_rows unlike 1 as expected$eol"; } else { if(!($result=MetabaseQuery($database,"SELECT user_name,user_password,subscribed,user_id,quota,weight,access_date,access_time,approved FROM users"))) $success=0; else { $verify=VerifyFetchedValues($database,$result,0,$data,$value,$field); MetabaseFreeResult($database,$result); if($verify) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: the value retrieved for field \"$field\" ($value) doesn't match what was inserted (".$data[$field].")$eol"; } else { $row=4321; $fields["user_name"]["Value"]=$data["user_name"]="user_$row"; $fields["user_password"]["Value"]=$data["user_password"]="somepassword"; $fields["subscribed"]["Value"]=$data["subscribed"]=$row % 2; $fields["quota"]["Value"]=$data["quota"]=strval($row/100); $fields["weight"]["Value"]=$data["weight"]=sqrt($row); $fields["access_date"]["Value"]=$data["access_date"]=MetabaseToday(); $fields["access_time"]["Value"]=$data["access_time"]=MetabaseTime(); $fields["approved"]["Value"]=$data["approved"]=MetabaseNow(); if(($success=MetabaseReplace($database,"users",$fields)) && (!$support_affected_rows || ($success=MetabaseAffectedRows($database,$affected_rows)))) { if(!$support_affected_rows && $affected_rows!=2) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: replacing a row in an table with a single row returned $affected_rows unlike 2 as expected$eol"; } if(!($result=MetabaseQuery($database,"SELECT user_name,user_password,subscribed,user_id,quota,weight,access_date,access_time,approved FROM users"))) $success=0; else { if(VerifyFetchedValues($database,$result,0,$data,$value,$field)) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: the value retrieved for field \"$field\" ($value) doesn't match what was replaced (".$data[$field].")$eol"; } else { if(!MetabaseEndOfResult($database,$result)) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: the query result did not seem to have reached the end of result as expected$eol"; } } MetabaseFreeResult($database,$result); } } } } } } } if($success && $pass) { $passed++; echo "OK.$eol"; } } else echo "Replace query is not supported.$eol"; } if(IsSet($tests["affectedrows"]) && $success) { if(MetabaseSupport($database,"AffectedRows")) { $test="affectedrows"; echo "Testing query affected rows... "; flush(); $pass=1; if(!MetabaseQuery($database,"DELETE FROM users")) $success=0; else { if(($prepared_query=MetabasePrepareQuery($database,"INSERT INTO users (user_name,user_password,subscribed,user_id,quota,weight,access_date,access_time,approved) VALUES (?,?,?,?,?,?,?,?,?)"))) { $data=array(); $inserted_rows=7; for($row=0;$row<$inserted_rows;$row++) { $data["user_name"]="user_$row"; $data["user_password"]="somepassword"; $data["subscribed"]=$row % 2; $data["user_id"]=$row; $data["quota"]=strval($row/100); $data["weight"]=sqrt($row); $data["access_date"]=MetabaseToday(); $data["access_time"]=MetabaseTime(); $data["approved"]=MetabaseNow(); if(!InsertTestValues($database,$prepared_query,$data) || !MetabaseAffectedRows($database,$affected_rows)) { $success=0; break; } if($affected_rows!=1) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: inserting the row $row return $affected_rows affected row count instead of 1 as expected$eol"; break; } } MetabaseFreePreparedQuery($database,$prepared_query); } else $success=0; if($success && $pass && ($prepared_query=MetabasePrepareQuery($database,"UPDATE users SET user_password=? WHERE user_id=?"))) { for($row=$inserted_rows;$inserted_rows;$inserted_rows=$row) { MetabaseQuerySetInteger($database,$prepared_query,1,$row=intval($inserted_rows/2)); if(!MetabaseExecuteQuery($database,$prepared_query) || !MetabaseAffectedRows($database,$affected_rows)) { $success=0; break; } if($affected_rows!=$inserted_rows-$row) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: deleting ".($inserted_rows-$row)." rows returned $affected_rows affected row count$eol"; break; } } MetabaseFreePreparedQuery($database,$prepared_query); } else $success=0; if($success && $pass) { $passed++; echo "OK.$eol"; } } } else echo "Query AffectedRows fetching is not supported.$eol"; } if(IsSet($tests["transactions"]) && $success) { if(MetabaseSupport($database,"Transactions")) { $test="transactions"; echo "Testing transactions... "; flush(); $pass=1; if(!MetabaseQuery($database,"DELETE FROM users") || !MetabaseAutoCommitTransactions($database,0)) $success=0; else { if(($prepared_query=MetabasePrepareQuery($database,"INSERT INTO users (user_name,user_password,subscribed,user_id,quota,weight,access_date,access_time,approved) VALUES (?,?,?,?,?,?,?,?,?)"))) { $data=array(); $row=0; $data["user_name"]="user_$row"; $data["user_password"]="somepassword"; $data["subscribed"]=$row % 2; $data["user_id"]=$row; $data["quota"]=strval($row/100); $data["weight"]=sqrt($row); $data["access_date"]=MetabaseToday(); $data["access_time"]=MetabaseTime(); $data["approved"]=MetabaseNow(); if(!InsertTestValues($database,$prepared_query,$data) || !MetabaseRollbackTransaction($database) || !($result=MetabaseQuery($database,"SELECT * FROM users"))) { $success=0; } else { if(!MetabaseEndOfResult($database,$result)) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: transaction rollback did not revert the row that was inserted$eol"; } MetabaseFreeResult($database,$result); } if($success && $pass) { if(!InsertTestValues($database,$prepared_query,$data) || !MetabaseCommitTransaction($database) || !($result=MetabaseQuery($database,"SELECT * FROM users"))) $success=0; else { if(MetabaseEndOfResult($database,$result)) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: transaction commit did not make permanent the row that was inserted$eol"; } MetabaseFreeResult($database,$result); } } if($success && $pass) { if(!($result=MetabaseQuery($database,"DELETE FROM users"))) $success=0; } if(!$success) { $error=MetabaseError($database); MetabaseRollbackTransaction($database); } if(!MetabaseAutoCommitTransactions($database,1)) { if(strcmp($error,"")) $error.=" and then could not end the transactions"; $success=0; } MetabaseFreePreparedQuery($database,$prepared_query); if($success && $pass) { if(!($result=MetabaseQuery($database,"SELECT * FROM users"))) $success=0; else { if(!MetabaseEndOfResult($database,$result)) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: transaction end with implicit commit when re-enabling auto-commit did not make permanent the rows that were deleted$eol"; } MetabaseFreeResult($database,$result); } } } else $success=0; if($success && $pass) { $passed++; echo "OK.$eol"; } } } else echo "Transactions are not supported.$eol"; } $support_lobs=MetabaseSupport($database,"LOBs"); if((IsSet($tests["lobstorage"]) || IsSet($tests["lobfiles"]) || IsSet($tests["lobnulls"])) && $success) { if($support_lobs) { $input_file="lob_test.schema"; if(!($success=$manager->UpdateDatabase($input_file,$input_file.".before",$driver_arguments,$database_variables))) $error=$manager->error; $debug_output=""; if(count($manager->warnings)>0) $debug_output.="WARNING:$eol".implode($manager->warnings,"!$eol").$eol; if($manager->database && IsSet($driver_arguments["CaptureDebug"])) $debug_output.=MetabaseDebugOutput($manager->database); } else echo "LOBs are not supported.$eol"; } if($support_lobs && IsSet($tests["lobstorage"]) && $success) { $test="lobstorage"; echo "Testing lob storage... "; flush(); $pass=1; if(!MetabaseQuery($database,"DELETE FROM files")) $success=0; else { if(($prepared_query=MetabasePrepareQuery($database,"INSERT INTO files (document,picture) VALUES (?,?)"))) { $character_lob=array( "Database"=>$database, "Error"=>"", "Data"=>"" ); for($code=32;$code<=127;$code++) $character_lob["Data"].=chr($code); $binary_lob=array( "Database"=>$database, "Error"=>"", "Data"=>"" ); for($code=0;$code<=255;$code++) $binary_lob["Data"].=chr($code); if(($success=MetabaseCreateLOB($character_lob,$clob))) { if(($success=MetabaseCreateLOB($binary_lob,$blob))) { MetabaseQuerySetCLOB($database,$prepared_query,1,$clob,"document"); MetabaseQuerySetBLOB($database,$prepared_query,2,$blob,"picture"); $success=MetabaseExecuteQuery($database,$prepared_query); MetabaseDestroyLOB($blob); } else $error=$binary_lob["Error"]; MetabaseDestroyLOB($clob); } else $error=$character_lob["Error"]; MetabaseFreePreparedQuery($database,$prepared_query); if(!$success || !($result=MetabaseQuery($database,"SELECT document,picture FROM files"))) $success=0; else { if(MetabaseEndOfResult($database,$result)) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: the query result seem to have reached the end of result too soon.$eol"; } else { $clob=MetabaseFetchCLOBResult($database,$result,0,"document"); if($clob) { for($value="";!MetabaseEndOfLOB($clob);) { if(MetabaseReadLOB($clob,$data,8000)<0) { $error=MetabaseLOBError($clob); $success=0; break; } $value.=$data; } MetabaseDestroyLOB($clob); if($success) { if(strcmp($value,$character_lob["Data"])) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: retrieved character LOB value (\"".$value."\") is different from what was stored (\"".$character_lob["Data"]."\")$eol"; } else { $blob=MetabaseFetchBLOBResult($database,$result,0,"picture"); if($blob) { for($value="";!MetabaseEndOfLOB($blob);) { if(MetabaseReadLOB($blob,$data,8000)<0) { $error=MetabaseLOBError($blob); $success=0; break; } $value.=$data; } MetabaseDestroyLOB($blob); if($success) { if(strcmp($value,$binary_lob["Data"])) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: retrieved binary LOB value (\"".$value."\") is different from what was stored (\"".$binary_lob["Data"]."\")$eol"; } } } else $success=0; } } } else $success=0; } MetabaseFreeResult($database,$result); } } else $success=0; } if($success && $pass) { $passed++; echo "OK.$eol"; } } if($support_lobs && IsSet($tests["lobfiles"]) && $success) { $test="lobfiles"; echo "Testing lob storage from and to files... "; flush(); $pass=1; if(!MetabaseQuery($database,"DELETE FROM files")) $success=0; else { if(($prepared_query=MetabasePrepareQuery($database,"INSERT INTO files (document,picture) VALUES (?,?)"))) { $character_data_file="character_data"; if(($file=fopen($character_data_file,"wb"))) { for($character_data="",$code=32;$code<=127;$code++) $character_data.=chr($code); $character_lob=array( "Type"=>"inputfile", "Database"=>$database, "Error"=>"", "FileName"=>$character_data_file, "BufferLength"=>32 ); $success=(fwrite($file,$character_data,strlen($character_data))==strlen($character_data)); fclose($file); if($success) { $binary_data_file="binary_data"; if(($file=fopen($binary_data_file,"wb"))) { for($binary_data="",$code=0;$code<=255;$code++) $binary_data.=chr($code); $binary_lob=array( "Type"=>"inputfile", "Database"=>$database, "Error"=>"", "FileName"=>$binary_data_file, "BufferLength"=>32 ); $success=(fwrite($file,$binary_data,strlen($binary_data))==strlen($binary_data)); fclose($file); } else $success=0; } } else $sucess=0; if($success) { if(($success=MetabaseCreateLOB($character_lob,$clob))) { if(($success=MetabaseCreateLOB($binary_lob,$blob))) { MetabaseQuerySetCLOB($database,$prepared_query,1,$clob,"document"); MetabaseQuerySetBLOB($database,$prepared_query,2,$blob,"picture"); $success=MetabaseExecuteQuery($database,$prepared_query); MetabaseDestroyLOB($blob); } else $error=$binary_lob["Error"]; MetabaseDestroyLOB($clob); } else $error=$character_lob["Error"]; MetabaseFreePreparedQuery($database,$prepared_query); if(!$success || !($result=MetabaseQuery($database,"SELECT document,picture FROM files"))) $success=0; else { if(MetabaseEndOfResult($database,$result)) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: the query result seem to have reached the end of result too soon.$eol"; } else { $character_lob=array( "Type"=>"outputfile", "Database"=>$database, "Result"=>$result, "Row"=>0, "Field"=>"document", "Binary"=>0, "Error"=>"", "FileName"=>$character_data_file, "BufferLength"=>32 ); if(($success=MetabaseCreateLOB($character_lob,$clob))) { if(MetabaseReadLOB($clob,$data,0)<0) { $error=MetabaseLOBError($clob); $success=0; } MetabaseDestroyLOB($clob); if($success) { if(($file=fopen($character_data_file,"rb"))) { if(GetType($value=fread($file,filesize($character_data_file)))!="string") { $success=0; $error="could not read from the character lob data file"; } fclose($file); } else { $success=0; $error="could not reopen the character lob data file"; } } if($success) { if(strcmp($value,$character_data)) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: retrieved character LOB value (\"".$value."\") is different from what was stored (\"".$character_data."\")$eol"; } else { $binary_lob=array( "Type"=>"outputfile", "Database"=>$database, "Result"=>$result, "Row"=>0, "Field"=>"picture", "Binary"=>1, "Error"=>"", "FileName"=>$binary_data_file, "BufferLength"=>32 ); if(($success=MetabaseCreateLOB($binary_lob,$blob))) { if(MetabaseReadLOB($blob,$data,0)<0) { $error=MetabaseLOBError($clob); $success=0; } MetabaseDestroyLOB($blob); if($success) { if(($file=fopen($binary_data_file,"rb"))) { if(GetType($value=fread($file,filesize($binary_data_file)))!="string") { $success=0; $error="could not read from the binary lob data file"; } fclose($file); } else { $success=0; $error="could not reopen the binary lob data file"; } } if($success) { if(strcmp($value,$binary_data)) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: retrieved binary LOB value (\"".$value."\") is different from what was stored (\"".$binary_data."\")$eol"; } } } else $success=0; } } } else $error=$character_lob["Error"]; } MetabaseFreeResult($database,$result); } } else $success=0; } } if($success && $pass) { $passed++; echo "OK.$eol"; } } if($support_lobs && IsSet($tests["lobnulls"]) && $success) { $test="lobnulls"; echo "Testing lob nulls... "; flush(); $pass=1; if(!MetabaseQuery($database,"DELETE FROM files")) $success=0; else { if(($prepared_query=MetabasePrepareQuery($database,"INSERT INTO files (document,picture) VALUES (?,?)"))) { MetabaseQuerySetNULL($database,$prepared_query,1,"clob"); MetabaseQuerySetNULL($database,$prepared_query,2,"blob"); $success=MetabaseExecuteQuery($database,$prepared_query); MetabaseFreePreparedQuery($database,$prepared_query); if(!$success || !($result=MetabaseQuery($database,"SELECT document,picture FROM files"))) $success=0; else { if(MetabaseEndOfResult($database,$result)) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: the query result seem to have reached the end of result too soon.$eol"; } else { if(!MetabaseResultIsNull($database,$result,0,$field="document") || !MetabaseResultIsNull($database,$result,0,$field="picture")) { $pass=0; echo "FAILED!$eol"; $failed++; echo "Test $test: a query result large object column is not NULL unlike what was expected$eol"; } } MetabaseFreeResult($database,$result); } } else $success=0; } if($success && $pass) { $passed++; echo "OK.$eol"; } } if(!$success && !strcmp($error,"")) $error=MetabaseError($database); if(IsSet($driver_arguments["CaptureDebug"])) $debug_output.=MetabaseDebugOutput($database); MetabaseCloseSetup($database); } } else $error=$manager->error; if(strcmp($error,"")) echo "Error: $error$eol"; else { echo ($failed==0 ? "Passed all the $passed tests that were performed!$eol" : ($passed==1 ? "Passed one test" : "$passed tests passed").", ".($failed==1 ? "Failed one test" : "$failed tests failed")."!$eol"); } if(IsSet($driver_arguments["CaptureDebug"])) echo $debug_output; echo "Exiting.$eol"; flush(); ?>