Exemplo n.º 1
0
 public function testFilePage()
 {
     $filename = M3_Util_File::getTempDir() . "/FileTestCase2.txt";
     @unlink($filename);
     // purge any old one that might be hanging out
     $this->assertFileNotExists($filename);
     // see that we can get an empty page
     $pageList = M3_Util_File::getFilePage($filename, new M3_Paging_PageControl());
     $this->assertEquals(0, $pageList->getTotalSize());
     $this->assertEquals(0, count($pageList->getData()));
     // file with 1 line
     $line1 = "first line\n";
     M3_Util_File::lockAndAppendFile($filename, $line1);
     $this->assertEquals(1, M3_Util_File::getNumberOfLines($filename));
     $pageList = M3_Util_File::getFilePage($filename, new M3_Paging_PageControl(0, 1));
     // page size is just enough
     $this->assertEquals(1, $pageList->getTotalSize());
     $data = $pageList->getData();
     $this->assertEquals(1, count($data));
     $this->assertEquals($line1, array_shift($data));
     $this->assertEquals(0, $pageList->getPageControl()->getPageNumber());
     $this->assertEquals(1, $pageList->getPageControl()->getPageSize());
     $this->assertEquals(0, $pageList->getPageControl()->getStartRow());
     $this->assertEquals(0, $pageList->getPageControl()->getEndRow());
     // file with 2 lines
     $line2 = "second line\n";
     M3_Util_File::lockAndAppendFile($filename, $line2);
     $this->assertEquals(2, M3_Util_File::getNumberOfLines($filename));
     $pageList = M3_Util_File::getFilePage($filename, new M3_Paging_PageControl(0, 5));
     // page size is larger than needed
     $this->assertEquals(2, $pageList->getTotalSize(), "total size should have given the full number of rows in file");
     $data = $pageList->getData();
     $this->assertEquals(2, count($data));
     $this->assertEquals($line1, $data[0]);
     $this->assertEquals($line2, $data[1]);
     $this->assertEquals(0, $pageList->getPageControl()->getPageNumber());
     $this->assertEquals(5, $pageList->getPageControl()->getPageSize());
     // page size is 5 still, even though we only have 2 rows
     $this->assertEquals(0, $pageList->getPageControl()->getStartRow());
     $this->assertEquals(4, $pageList->getPageControl()->getEndRow());
     // let's page our 2-rows into two 1-row pages
     $pageList = M3_Util_File::getFilePage($filename, new M3_Paging_PageControl(0, 1));
     // first page
     $this->assertEquals(2, $pageList->getTotalSize(), "total number of rows should be 2, even though we only have 1 page worth");
     $data = $pageList->getData();
     $this->assertEquals(1, count($data));
     // our page control should have limited this to 1
     $this->assertEquals($line1, $data[0]);
     $this->assertEquals(0, $pageList->getPageControl()->getPageNumber());
     $this->assertEquals(1, $pageList->getPageControl()->getPageSize());
     $this->assertEquals(0, $pageList->getPageControl()->getStartRow());
     $this->assertEquals(0, $pageList->getPageControl()->getEndRow());
     $pageList = M3_Util_File::getFilePage($filename, new M3_Paging_PageControl(1, 1));
     // second page
     $this->assertEquals(2, $pageList->getTotalSize(), "Total number of rows should be 2, even though we only have 1 page worth.");
     $data = $pageList->getData();
     $this->assertEquals(1, count($data));
     // our page control should have limited this to 1
     $this->assertEquals($line2, $data[0]);
     // first row in the page is the second overall row
     $this->assertEquals(1, $pageList->getPageControl()->getPageNumber());
     $this->assertEquals(1, $pageList->getPageControl()->getPageSize());
     $this->assertEquals(1, $pageList->getPageControl()->getStartRow());
     $this->assertEquals(1, $pageList->getPageControl()->getEndRow());
     $pageList = M3_Util_File::getFilePage($filename, new M3_Paging_PageControl(2, 1));
     // third page (non-existent)
     $this->assertEquals(2, $pageList->getTotalSize(), "empty page, but we still should say how many total rows there are");
     $data = $pageList->getData();
     $this->assertEquals(0, count($data));
     $this->assertEquals(2, $pageList->getPageControl()->getPageNumber());
     $this->assertEquals(1, $pageList->getPageControl()->getPageSize());
     $this->assertEquals(2, $pageList->getPageControl()->getStartRow());
     $this->assertEquals(2, $pageList->getPageControl()->getEndRow());
     // let's page our 2-rows into two 1-row pages again, but explicitly indicate that we know total size is 2
     $pageList = M3_Util_File::getFilePage($filename, new M3_Paging_PageControl(0, 1), 2);
     // first page
     $this->assertEquals(2, $pageList->getTotalSize(), "total number of rows should be 2, even though we only have 1 page worth..");
     $data = $pageList->getData();
     $this->assertEquals(1, count($data));
     // our page control should have limited this to 1
     $this->assertEquals($line1, $data[0]);
     $this->assertEquals(0, $pageList->getPageControl()->getPageNumber());
     $this->assertEquals(1, $pageList->getPageControl()->getPageSize());
     $this->assertEquals(0, $pageList->getPageControl()->getStartRow());
     $this->assertEquals(0, $pageList->getPageControl()->getEndRow());
     $pageList = M3_Util_File::getFilePage($filename, new M3_Paging_PageControl(1, 1), 2);
     // second page
     $this->assertEquals(2, $pageList->getTotalSize(), "Total number of rows should be 2, even though we only have 1 page worth..");
     $data = $pageList->getData();
     $this->assertEquals(1, count($data));
     // our page control should have limited this to 1
     $this->assertEquals($line2, $data[0]);
     // first row in the page is the second overall row
     $this->assertEquals(1, $pageList->getPageControl()->getPageNumber());
     $this->assertEquals(1, $pageList->getPageControl()->getPageSize());
     $this->assertEquals(1, $pageList->getPageControl()->getStartRow());
     $this->assertEquals(1, $pageList->getPageControl()->getEndRow());
     $pageList = M3_Util_File::getFilePage($filename, new M3_Paging_PageControl(2, 1), 2);
     // third page (non-existent)
     $this->assertEquals(2, $pageList->getTotalSize(), "empty page, but we still should say how many total rows there are");
     $data = $pageList->getData();
     $this->assertEquals(0, count($data));
     $this->assertEquals(2, $pageList->getPageControl()->getPageNumber());
     $this->assertEquals(1, $pageList->getPageControl()->getPageSize());
     $this->assertEquals(2, $pageList->getPageControl()->getStartRow());
     $this->assertEquals(2, $pageList->getPageControl()->getEndRow());
     // file with 6 lines
     $line3 = "third line\n";
     $line4 = "fourth line\n";
     $line5 = "fifth line\n";
     $line6 = "sixth line\n";
     M3_Util_File::lockAndAppendFile($filename, $line3);
     M3_Util_File::lockAndAppendFile($filename, $line4);
     M3_Util_File::lockAndAppendFile($filename, $line5);
     M3_Util_File::lockAndAppendFile($filename, $line6);
     $this->assertEquals(6, M3_Util_File::getNumberOfLines($filename));
     $pageList = M3_Util_File::getFilePage($filename, new M3_Paging_PageControl(0, 10));
     // page size is larger than needed
     $this->assertEquals(6, $pageList->getTotalSize(), "total size should have given the full number of rows in file");
     $data = $pageList->getData();
     $this->assertEquals(6, count($data));
     $this->assertEquals($line1, $data[0]);
     $this->assertEquals($line2, $data[1]);
     $this->assertEquals($line3, $data[2]);
     $this->assertEquals($line4, $data[3]);
     $this->assertEquals($line5, $data[4]);
     $this->assertEquals($line6, $data[5]);
     $this->assertEquals(0, $pageList->getPageControl()->getPageNumber());
     $this->assertEquals(10, $pageList->getPageControl()->getPageSize());
     // page size is 10 still, even though we only have 6 rows
     $this->assertEquals(0, $pageList->getPageControl()->getStartRow());
     $this->assertEquals(9, $pageList->getPageControl()->getEndRow());
     // let's page our 6-rows into two 3-row pages
     $pageList = M3_Util_File::getFilePage($filename, new M3_Paging_PageControl(0, 3));
     // first page
     $this->assertEquals(6, $pageList->getTotalSize(), "total number of rows should be 6, even though we only have 1 page worth");
     $data = $pageList->getData();
     $this->assertEquals(3, count($data), "our page control should have limited this to 3");
     $this->assertEquals($line1, $data[0]);
     $this->assertEquals($line2, $data[1]);
     $this->assertEquals($line3, $data[2]);
     $this->assertEquals(0, $pageList->getPageControl()->getPageNumber());
     $this->assertEquals(3, $pageList->getPageControl()->getPageSize());
     $this->assertEquals(0, $pageList->getPageControl()->getStartRow());
     $this->assertEquals(2, $pageList->getPageControl()->getEndRow());
     $pageList = M3_Util_File::getFilePage($filename, new M3_Paging_PageControl(1, 3));
     // second page
     $this->assertEquals(6, $pageList->getTotalSize(), "Total number of rows should be 6, even though we only have 1 page worth.");
     $data = $pageList->getData();
     $this->assertEquals(3, count($data), "Our page control should have limited this to 3.");
     $this->assertEquals($line4, $data[0], "first row in the page should be the fourth overall row");
     $this->assertEquals($line5, $data[1], "second row in the page should be the fifth overall row");
     $this->assertEquals($line6, $data[2], "third row in the page should be the sixth overall row");
     $this->assertEquals(1, $pageList->getPageControl()->getPageNumber());
     $this->assertEquals(3, $pageList->getPageControl()->getPageSize());
     $this->assertEquals(3, $pageList->getPageControl()->getStartRow());
     $this->assertEquals(5, $pageList->getPageControl()->getEndRow());
     $pageList = M3_Util_File::getFilePage($filename, new M3_Paging_PageControl(2, 3));
     // third page (non-existent)
     $this->assertEquals(6, $pageList->getTotalSize(), "empty page, but we still should say how many total rows there are");
     $data = $pageList->getData();
     $this->assertEquals(0, count($data));
     $this->assertEquals(2, $pageList->getPageControl()->getPageNumber());
     $this->assertEquals(3, $pageList->getPageControl()->getPageSize());
     $this->assertEquals(6, $pageList->getPageControl()->getStartRow());
     $this->assertEquals(8, $pageList->getPageControl()->getEndRow());
     // let's page our 6-rows into two 3-row pages again, but explicitly indicate that we know total size is 6
     $pageList = M3_Util_File::getFilePage($filename, new M3_Paging_PageControl(0, 3), 6);
     // first page
     $this->assertEquals(6, $pageList->getTotalSize(), "total number of rows should be 6, even though we only have 1 page worth");
     $data = $pageList->getData();
     $this->assertEquals(3, count($data), "our page control should have limited this to 3");
     $this->assertEquals($line1, $data[0]);
     $this->assertEquals($line2, $data[1]);
     $this->assertEquals($line3, $data[2]);
     $this->assertEquals(0, $pageList->getPageControl()->getPageNumber());
     $this->assertEquals(3, $pageList->getPageControl()->getPageSize());
     $this->assertEquals(0, $pageList->getPageControl()->getStartRow());
     $this->assertEquals(2, $pageList->getPageControl()->getEndRow());
     $pageList = M3_Util_File::getFilePage($filename, new M3_Paging_PageControl(1, 3), 6);
     // second page
     $this->assertEquals(6, $pageList->getTotalSize(), "Total number of rows should be 6, even though we only have 1 page worth.");
     $data = $pageList->getData();
     $this->assertEquals(3, count($data), "Our page control should have limited this to 3.");
     $this->assertEquals($line4, $data[0], "first row in the page should be the fourth overall row");
     $this->assertEquals($line5, $data[1], "second row in the page should be the fifth overall row");
     $this->assertEquals($line6, $data[2], "third row in the page should be the sixth overall row");
     $this->assertEquals(1, $pageList->getPageControl()->getPageNumber());
     $this->assertEquals(3, $pageList->getPageControl()->getPageSize());
     $this->assertEquals(3, $pageList->getPageControl()->getStartRow());
     $this->assertEquals(5, $pageList->getPageControl()->getEndRow());
     $pageList = M3_Util_File::getFilePage($filename, new M3_Paging_PageControl(2, 3), 6);
     // third page (non-existent)
     $this->assertEquals(6, $pageList->getTotalSize(), "empty page, but we still should say how many total rows there are");
     $data = $pageList->getData();
     $this->assertEquals(0, count($data));
     $this->assertEquals(2, $pageList->getPageControl()->getPageNumber());
     $this->assertEquals(3, $pageList->getPageControl()->getPageSize());
     $this->assertEquals(6, $pageList->getPageControl()->getStartRow());
     $this->assertEquals(8, $pageList->getPageControl()->getEndRow());
     // let's page our 6-rows into three 2-row pages
     $pageList = M3_Util_File::getFilePage($filename, new M3_Paging_PageControl(0, 2));
     // first page
     $this->assertEquals(6, $pageList->getTotalSize(), "total number of rows should be 6, even though we only have 1 page worth");
     $data = $pageList->getData();
     $this->assertEquals(2, count($data), "our page control should have limited this to 2");
     $this->assertEquals($line1, $data[0]);
     $this->assertEquals($line2, $data[1]);
     $this->assertEquals(0, $pageList->getPageControl()->getPageNumber());
     $this->assertEquals(2, $pageList->getPageControl()->getPageSize());
     $this->assertEquals(0, $pageList->getPageControl()->getStartRow());
     $this->assertEquals(1, $pageList->getPageControl()->getEndRow());
     $pageList = M3_Util_File::getFilePage($filename, new M3_Paging_PageControl(1, 2));
     // second page
     $this->assertEquals(6, $pageList->getTotalSize(), "Total number of rows should be 6, even though we only have 1 page worth.");
     $data = $pageList->getData();
     $this->assertEquals(2, count($data), "Our page control should have limited this to 2.");
     $this->assertEquals($line3, $data[0], "first row in the page should be the third overall row");
     $this->assertEquals($line4, $data[1], "second row in the page should be the fourth overall row");
     $this->assertEquals(1, $pageList->getPageControl()->getPageNumber());
     $this->assertEquals(2, $pageList->getPageControl()->getPageSize());
     $this->assertEquals(2, $pageList->getPageControl()->getStartRow());
     $this->assertEquals(3, $pageList->getPageControl()->getEndRow());
     $pageList = M3_Util_File::getFilePage($filename, new M3_Paging_PageControl(2, 2));
     // third page
     $this->assertEquals(6, $pageList->getTotalSize(), "Total number of rows should be 6, even though we only have 1 page worth..");
     $data = $pageList->getData();
     $this->assertEquals(2, count($data), "Our page control should have limited this to 2.");
     $this->assertEquals($line5, $data[0], "first row in the page should be the fifth overall row");
     $this->assertEquals($line6, $data[1], "second row in the page should be the sixth overall row");
     $this->assertEquals(2, $pageList->getPageControl()->getPageNumber());
     $this->assertEquals(2, $pageList->getPageControl()->getPageSize());
     $this->assertEquals(4, $pageList->getPageControl()->getStartRow());
     $this->assertEquals(5, $pageList->getPageControl()->getEndRow());
     $pageList = M3_Util_File::getFilePage($filename, new M3_Paging_PageControl(3, 2));
     // fourth page (non-existent)
     $this->assertEquals(6, $pageList->getTotalSize(), "empty page, but we still should say how many total rows there are");
     $data = $pageList->getData();
     $this->assertEquals(0, count($data));
     $this->assertEquals(3, $pageList->getPageControl()->getPageNumber());
     $this->assertEquals(2, $pageList->getPageControl()->getPageSize());
     $this->assertEquals(6, $pageList->getPageControl()->getStartRow());
     $this->assertEquals(7, $pageList->getPageControl()->getEndRow());
     // test our truncate file function, and see that it really empties the file
     M3_Util_File::truncateFile($filename);
     $pageList = M3_Util_File::getFilePage($filename, new M3_Paging_PageControl());
     $this->assertEquals(0, $pageList->getTotalSize());
     $this->assertEquals(0, count($pageList->getData()));
     unlink($filename);
 }
Exemplo n.º 2
0
 /**
  * We only store MD5 hashs of queries in the metrics file so limit the size of that file.
  * We store the real query string in a file whose name is the MD5 of the query.
  * This creates that MD5 file if it does not yet exist.
  * 
  * @return this returns the MD5 of the query, or "" if $query is empty
  */
 private function createQueryMD5File($query)
 {
     if (empty($query)) {
         return "";
     }
     $_md5 = md5($query);
     // first see if we haven't seen this query yet
     if (!isset($this->md5FilesCreated[$_md5])) {
         // now see if the file isn't created yet
         $_pathname = M3_Util_File::buildPathName($this->dataDirectory, $_md5 . ".md5");
         if (!file_exists($_pathname)) {
             M3_Util_File::lockAndAppendFile($_pathname, $query);
         }
         $this->md5FilesCreated[$_md5] = true;
     }
     return $_md5;
 }