Example #1
0
 public function test_performance()
 {
     $db = new Database();
     $db->Type = Database::TYPE_SQLite;
     $db->HostOrPath = ":memory:";
     $db->Connect();
     for ($i = 0; $i < 25; $i++) {
         // Create table and fill it
         $db->Query("CREATE TABLE IF NOT EXISTS table_{$i} (id INTEGER PRIMARY KEY, content TEXT)");
         $k = 1;
         $step = 500;
         $stop = 100000;
         while ($k < $stop) {
             $keys = [];
             $values = [];
             for ($j = 0; $j < $step; $j++) {
                 $keys[] = "(:d{$j})";
                 $values["d{$j}"] = "d{$j}";
             }
             $db->Query("INSERT INTO table_{$i} (content) VALUES " . join(", ", $keys), $keys);
             $k += $step;
             $this->assertEquals($k - 1, $db->LastInsertId);
         }
         // Select many IDs, remove records by IDs and roll back changes
         $db->BeginTransaction();
         $rs = $db->Query("SELECT id FROM table_{$i} WHERE (id > 50 AND id < 101) OR (id > 250 AND id < 451)");
         $ids = [];
         while ($r = $db->FetchArray($rs)) {
             $ids[] = $r["id"];
         }
         $db->IWillBeCareful();
         $db->Query("DELETE FROM table_{$i} WHERE id IN (:ids)", array("ids" => join(", ", $ids)));
         $db->RollBack();
         // Update records by content and commit changes
         $db->BeginTransaction();
         $db->Query("UPDATE table_{$i} SET content = 'd1 or d3' WHERE content LIKE :d1 OR content LIKE :d3", array("d1" => "d%1", "d3" => "d%3"));
         $db->Commit();
     }
     $db->Close();
 }