Ejemplo n.º 1
0
 /**
  * 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);
 }
Ejemplo n.º 2
0
 /**
  * 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";
     }
 }
Ejemplo n.º 3
0
 /**
  * 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));
 }
Ejemplo n.º 4
0
 /**
  * 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));
 }