/** * Tests that cached table descriptions are saved under the sanitized key name * * @return void */ public function testCacheKeyName() { Configure::write('Cache.disable', false); $dbName = 'db' . rand() . '$(*%&).db'; $this->assertFalse(file_exists(TMP . $dbName)); try { $db = new Sqlite(array_merge($this->Dbo->config, array('database' => TMP . $dbName))); } catch (MissingConnectionException $e) { // This might be caused by NTFS file systems, where '*' is a forbidden character. Repeat without this character. $dbName = str_replace('*', '', $dbName); $db = new Sqlite(array_merge($this->Dbo->config, array('database' => TMP . $dbName))); } $this->assertTrue(file_exists(TMP . $dbName)); $db->execute("CREATE TABLE test_list (id VARCHAR(255));"); $db->cacheSources = true; $this->assertEquals(array('test_list'), $db->listSources()); $db->cacheSources = false; $fileName = '_' . preg_replace('/[^A-Za-z0-9_\\-+]/', '_', TMP . $dbName) . '_list'; $result = Cache::read($fileName, '_cake_model_'); $this->assertEquals(array('test_list'), $result); Cache::delete($fileName, '_cake_model_'); Configure::write('Cache.disable', true); }
/** * Tests that cached table descriptions are saved under the sanitized key name * * @return void */ public function testCacheKeyName() { Configure::write('Cache.disable', false); $dbName = 'db' . rand() . '$(*%&).db'; $this->assertFalse(file_exists(TMP . $dbName)); $db = new Sqlite(array_merge($this->Dbo->config, array('database' => TMP . $dbName))); $this->assertTrue(file_exists(TMP . $dbName)); $db->execute("CREATE TABLE test_list (id VARCHAR(255));"); $db->cacheSources = true; $this->assertEquals(array('test_list'), $db->listSources()); $db->cacheSources = false; $fileName = '_' . preg_replace('/[^A-Za-z0-9_\\-+]/', '_', TMP . $dbName) . '_list'; $result = Cache::read($fileName, '_cake_model_'); $this->assertEquals(array('test_list'), $result); Cache::delete($fileName, '_cake_model_'); Configure::write('Cache.disable', true); }
/** * Returns an array of tables in the database. If there are no tables, an error is raised and the application exits. * * @return array Array of tablenames in the database * @access public */ public function listSources($data = null) { //echo "runs listSources\n"; $db = $this->config['database']; $this->config['database'] = basename($this->config['database']); $cache = parent::listSources(); if ($cache != null) { // >>> ADD 2010/03/19 egashira // 接続をフルパスに戻す $this->config['database'] = $db; // <<< return $cache; } //echo "listsources:beforeresult "; $result = $this->fetchAll("SELECT name FROM sqlite_master WHERE type='table' AND name<>'sqlite_sequence' ORDER BY name;", false); //pr($result); if (!$result || empty($result)) { // 接続をフルパスに戻す $this->config['database'] = $db; return array(); } else { $tables = array(); foreach ($result as $table) { $tables[] = $table[0]['name']; } parent::listSources($tables); $this->config['database'] = $db; return $tables; } $this->config['database'] = $db; return array(); }