dbData::create PHP Method

create() public method

Generates the SQL that will create the index in the database
public create ( object &$xmls ) : array
$xmls object adoSchema object
return array Array containing index creation SQL
    function create(&$xmls)
    {
        $table = $xmls->dict->TableName($this->parent->name);
        $table_field_count = count($this->parent->fields);
        $sql = array();
        // eliminate any columns that aren't in the table
        foreach ($this->data as $row) {
            $table_fields = $this->parent->fields;
            $fields = array();
            foreach ($row as $field_id => $field_data) {
                if (!array_key_exists($field_id, $table_fields)) {
                    if (is_numeric($field_id)) {
                        $field_id = reset(array_keys($table_fields));
                    } else {
                        continue;
                    }
                }
                $name = $table_fields[$field_id]['NAME'];
                switch ($table_fields[$field_id]['TYPE']) {
                    case 'C':
                    case 'C2':
                    case 'X':
                    case 'X2':
                        $fields[$name] = $xmls->db->qstr($field_data);
                        break;
                    case 'I':
                    case 'I1':
                    case 'I2':
                    case 'I4':
                    case 'I8':
                        $fields[$name] = intval($field_data);
                        break;
                    default:
                        $fields[$name] = $field_data;
                }
                unset($table_fields[$field_id]);
            }
            // check that at least 1 column is specified
            if (empty($fields)) {
                continue;
            }
            // check that no required columns are missing
            if (count($fields) < $table_field_count) {
                foreach ($table_fields as $field) {
                    if (isset($field['OPTS'])) {
                        if ((in_array('NOTNULL', $field['OPTS']) || in_array('KEY', $field['OPTS'])) && !in_array('AUTOINCREMENT', $field['OPTS'])) {
                            continue 2;
                        }
                    }
                }
            }
            $sql[] = 'INSERT INTO ' . $table . ' (' . implode(',', array_keys($fields)) . ') VALUES (' . implode(',', $fields) . ')';
        }
        return $sql;
    }