/** * tries to get the create statement of a function */ public function testGetRoutineFunction() { $function = Routine::model()->findByPk(array('ROUTINE_SCHEMA' => 'routinetest', 'ROUTINE_NAME' => 'test_function')); $createRoutine = $function->getCreateRoutine(); $this->assertType('string', $createRoutine); $this->assertType('string', $createRoutine); $this->assertType('string', $function->delete()); $cmd = Routine::$db->createCommand($createRoutine); $this->assertEquals(0, $cmd->execute()); $function = Routine::model()->findByPk(array('ROUTINE_SCHEMA' => 'routinetest', 'ROUTINE_NAME' => 'test_function')); $this->assertType('Routine', $function); }
/** * Exports all routines of the given array and writes the dump to the output buffer. * * @param array list of routines */ private function exportRoutines($routines) { // Get DbConnection object $db = Yii::app()->db; // Escape all routine names $routineNames = array(); foreach ($routines as $routine) { $routineNames[] = Yii::app()->db->quoteValue($routine); } // Find all routines $routines = Routine::model()->findAll('ROUTINE_NAME IN (' . implode(',', $routineNames) . ') ' . 'AND ROUTINE_SCHEMA = ' . $db->quoteValue($this->schema)); foreach ($routines as $routine) { $this->comment(ucfirst(strtolower($routine->ROUTINE_TYPE)) . ' ' . $db->quoteTableName($routine->ROUTINE_NAME)); echo "\n\n"; if ($this->settings['addDropObject']) { echo 'DROP ', strtoupper($routine->ROUTINE_TYPE), ' IF EXISTS ', $db->quoteTableName($routine->ROUTINE_NAME), ";\n"; } echo $routine->getCreateRoutine(), ";\n\n"; } }
/** * Lists all routines (procedures & functions). */ public function actionRoutines() { $schema = $this->loadSchema(); // Criteria $criteria = new CDbCriteria(); $criteria->condition = 'ROUTINE_SCHEMA = :schema'; $criteria->params = array(':schema' => $this->schema); // Pagination $pages = new Pagination(Routine::model()->count($criteria)); $pages->setupPageSize('pageSize', 'schema.routines'); $pages->applyLimit($criteria); $pages->route = '#routines'; // Sort $sort = new CSort('View'); $sort->attributes = array('ROUTINE_NAME' => 'name'); $sort->route = '#routines'; $sort->applyOrder($criteria); // Load data $schema->routines = Routine::model()->findAll($criteria); // Render $this->render('routines', array('schema' => $schema, 'routineCount' => count($schema->routines), 'pages' => $pages, 'sort' => $sort)); }
/** * Updates a routine. */ public function actionUpdate() { $routine = Routine::model()->findByPk(array('ROUTINE_SCHEMA' => $this->schema, 'ROUTINE_NAME' => $this->routine)); if (is_null($routine)) { $routine = new Routine(); $routine->ROUTINE_TYPE = $_POST['type']; } $type = strtolower($routine->ROUTINE_TYPE); if (isset($_POST['query'])) { $currentRoutine = $routine->getCreateRoutine(); $query = $_POST['query']; try { // Split queries $splitter = new SqlSplitter($query); $splitter->delimiter = self::$delimiter; $queries = $splitter->getQueries(); foreach ($queries as $query2) { $cmd = $this->db->createCommand($query2); $cmd->prepare(); $cmd->execute(); } $response = new AjaxResponse(); $response->addNotification('success', Yii::t('core', 'successAlterRoutine', array('{routine}' => $routine->ROUTINE_NAME)), null, $query); $response->refresh = true; $this->sendJSON($response); } catch (CDbException $ex) { $errorInfo = $cmd->getPdoStatement()->errorInfo(); $routine->addError(null, Yii::t('core', 'sqlErrorOccured', array('{errno}' => $errorInfo[1], '{errmsg}' => $errorInfo[2]))); $this->restoreCurrentRoutine($currentRoutine); } } else { $query = 'DROP ' . strtoupper($routine->ROUTINE_TYPE) . ' ' . $this->db->quoteTableName($routine->ROUTINE_NAME) . self::$delimiter . "\n" . $routine->getCreateRoutine(); } CHtml::generateRandomIdPrefix(); $this->render('form', array('routine' => $routine, 'type' => $type, 'query' => $query)); }