コード例 #1
0
ファイル: DBManager.php プロジェクト: delkyd/sugarcrm_dev
 /**
  * Generate a set of Insert statements based on the bean given
  *
  * @deprecated
  *
  * @param  SugarBean $bean         the bean from which table we will generate insert stmts
  * @param  string $select_query the query which will give us the set of objects we want to place into our insert statement
  * @param  int    $start        the first row to query
  * @param  int    $count        the number of rows to query
  * @param  string $table        the table to query from
  * @param bool $is_related_query
  * @return string SQL insert statement
  */
 public function generateInsertSQL(SugarBean $bean, $select_query, $start, $count = -1, $table, $is_related_query = false)
 {
     $this->log->info('call to DBManager::generateInsertSQL() is deprecated');
     global $sugar_config;
     $rows_found = 0;
     $count_query = $bean->create_list_count_query($select_query);
     if (!empty($count_query)) {
         // We have a count query.  Run it and get the results.
         $result = $this->query($count_query, true, "Error running count query for {$this->object_name} List: ");
         $assoc = $this->fetchByAssoc($result);
         if (!empty($assoc['c'])) {
             $rows_found = $assoc['c'];
         }
     }
     if ($count == -1) {
         $count = $sugar_config['list_max_entries_per_page'];
     }
     $next_offset = $start + $count;
     $result = $this->limitQuery($select_query, $start, $count);
     // get basic insert
     $sql = "INSERT INTO " . $table;
     $custom_sql = "INSERT INTO " . $table . "_cstm";
     // get field definitions
     $fields = $bean->getFieldDefinitions();
     $custom_fields = array();
     if ($bean->hasCustomFields()) {
         foreach ($fields as $fieldDef) {
             if ($fieldDef['source'] == 'custom_fields') {
                 $custom_fields[$fieldDef['name']] = $fieldDef['name'];
             }
         }
         if (!empty($custom_fields)) {
             $custom_fields['id_c'] = 'id_c';
             $id_field = array('name' => 'id_c', 'custom_type' => 'id');
             $fields[] = $id_field;
         }
     }
     // get column names and values
     $row_array = array();
     $columns = array();
     $cstm_row_array = array();
     $cstm_columns = array();
     $built_columns = false;
     while (($row = $this->fetchByAssoc($result)) != null) {
         $values = array();
         $cstm_values = array();
         if (!$is_related_query) {
             foreach ($fields as $fieldDef) {
                 if (isset($fieldDef['source']) && $fieldDef['source'] != 'db' && $fieldDef['source'] != 'custom_fields') {
                     continue;
                 }
                 $val = $row[$fieldDef['name']];
                 //handle auto increment values here only need to do this on insert not create
                 if ($fieldDef['name'] == 'deleted') {
                     $values['deleted'] = $val;
                     if (!$built_columns) {
                         $columns[] = 'deleted';
                     }
                 } else {
                     $type = $fieldDef['type'];
                     if (!empty($fieldDef['custom_type'])) {
                         $type = $fieldDef['custom_type'];
                     }
                     // need to do some thing about types of values
                     if ($this->dbType == 'mysql' && $val == '' && ($type == 'datetime' || $type == 'date' || $type == 'int' || $type == 'currency' || $type == 'decimal')) {
                         if (!empty($custom_fields[$fieldDef['name']])) {
                             $cstm_values[$fieldDef['name']] = 'null';
                         } else {
                             $values[$fieldDef['name']] = 'null';
                         }
                     } else {
                         if (isset($type) && $type == 'int') {
                             if (!empty($custom_fields[$fieldDef['name']])) {
                                 $cstm_values[$fieldDef['name']] = $GLOBALS['db']->quote(from_html($val));
                             } else {
                                 $values[$fieldDef['name']] = $GLOBALS['db']->quote(from_html($val));
                             }
                         } else {
                             if (!empty($custom_fields[$fieldDef['name']])) {
                                 $cstm_values[$fieldDef['name']] = "'" . $GLOBALS['db']->quote(from_html($val)) . "'";
                             } else {
                                 $values[$fieldDef['name']] = "'" . $GLOBALS['db']->quote(from_html($val)) . "'";
                             }
                         }
                     }
                     if (!$built_columns) {
                         if (!empty($custom_fields[$fieldDef['name']])) {
                             $cstm_columns[] = $fieldDef['name'];
                         } else {
                             $columns[] = $fieldDef['name'];
                         }
                     }
                 }
             }
         } else {
             foreach ($row as $key => $val) {
                 if ($key != 'orc_row') {
                     $values[$key] = "'{$val}'";
                     if (!$built_columns) {
                         $columns[] = $key;
                     }
                 }
             }
         }
         $built_columns = true;
         if (!empty($values)) {
             $row_array[] = $values;
         }
         if (!empty($cstm_values) && !empty($cstm_values['id_c']) && strlen($cstm_values['id_c']) > 7) {
             $cstm_row_array[] = $cstm_values;
         }
     }
     //if (sizeof ($values) == 0) return ""; // no columns set
     // get the entire sql
     $sql .= "(" . implode(",", $columns) . ") ";
     $sql .= "VALUES";
     for ($i = 0; $i < count($row_array); $i++) {
         $sql .= " (" . implode(",", $row_array[$i]) . ")";
         if ($i < count($row_array) - 1) {
             $sql .= ", ";
         }
     }
     //custom
     // get the entire sql
     $custom_sql .= "(" . implode(",", $cstm_columns) . ") ";
     $custom_sql .= "VALUES";
     for ($i = 0; $i < count($cstm_row_array); $i++) {
         $custom_sql .= " (" . implode(",", $cstm_row_array[$i]) . ")";
         if ($i < count($cstm_row_array) - 1) {
             $custom_sql .= ", ";
         }
     }
     return array('data' => $sql, 'cstm_sql' => $custom_sql, 'total_count' => $rows_found, 'next_offset' => $next_offset);
 }
コード例 #2
0
 function getTotalCount($main_query)
 {
     if (!empty($this->count_query)) {
         $count_query = $this->count_query;
     } else {
         $count_query = SugarBean::create_list_count_query($main_query);
     }
     $result = $this->db->query($count_query);
     if ($row = $this->db->fetchByAssoc($result)) {
         return $row['c'];
     }
     return 0;
 }
コード例 #3
0
ファイル: Campaign.php プロジェクト: rgauss/sugarcrm_dev
 /**
  * create_list_count_query
  * Overrode this method from SugarBean to handle the distinct parameter used to filter out
  * duplicate entries for some of the subpanel listivews.  Without the distinct filter, the
  * list count would be inaccurate because one-to-many email_marketing entries may be associated
  * with a campaign.
  *
  * @param string $query Select query string
  * @param array $param array of arguments
  * @return string count query
  *
  */
 function create_list_count_query($query, $params = array())
 {
     //include the distinct filter if a marketing id is defined, which means we need to filter out duplicates by the passed in group by.
     //if no marketing id is specified, it is understood there might be duplicate target entries so no need to filter out
     if (strpos($query, 'marketing_id') !== false && isset($params['distinct'])) {
         $pattern = '/SELECT(.*?)(\\s){1}FROM(\\s){1}/is';
         // ignores the case
         $replacement = 'SELECT COUNT(DISTINCT ' . $params['distinct'] . ') c FROM ';
         $query = preg_replace($pattern, $replacement, $query, 1);
         return $query;
     }
     //If distinct parameter not found, default to SugarBean's function
     return parent::create_list_count_query($query);
 }
コード例 #4
0
ファイル: SugarBean.php プロジェクト: rgauss/sugarcrm_dev
 /**
  * Returns the number of rows that the given SQL query should produce
  *
  * Internal function, do not override.
  * @param string $query valid select  query
  * @param boolean $is_count_query Optional, Default false, set to true if passed query is a count query.
  * @return int count of rows found
  */
 function _get_num_rows_in_query($query, $is_count_query = false)
 {
     $num_rows_in_query = 0;
     if (!$is_count_query) {
         $count_query = SugarBean::create_list_count_query($query);
     } else {
         $count_query = $query;
     }
     $result = $this->db->query($count_query, true, "Error running count query for {$this->object_name} List: ");
     $row_num = 0;
     $row = $this->db->fetchByAssoc($result, $row_num);
     while ($row) {
         $num_rows_in_query += current($row);
         $row_num++;
         $row = $this->db->fetchByAssoc($result, $row_num);
     }
     return $num_rows_in_query;
 }
コード例 #5
0
 function getTotalCount($main_query)
 {
     $count_query = SugarBean::create_list_count_query($main_query);
     $result = $GLOBALS['db']->query($count_query);
     if ($row = $GLOBALS['db']->fetchByAssoc($result)) {
         return $row['c'];
     }
     return 0;
 }