public function registerField(ARField $schemaField, $reference = true) { $name = $schemaField->getName(); $this->fieldList[$name] = $schemaField; if ($schemaField instanceof ARForeignKey) { $this->foreignKeyList[$name] = $schemaField; } if ($schemaField instanceof ARPrimaryKey) { $this->primaryKeyList[$name] = $schemaField; } if (!$reference) { $this->skippedReferences[$name] = true; } $this->fieldsByType[get_class($schemaField->getDataType())][$name] = $schemaField; }
public static function getFieldType(ARField $field) { $fieldType = $field->getDataType(); if ($field instanceof ARForeignKeyField || $field instanceof ARPrimaryKeyField) { return null; } if ($fieldType instanceof ARBool) { $type = 'bool'; } elseif ($fieldType instanceof ARNumeric) { $type = 'numeric'; } elseif ($fieldType instanceof ARPeriod) { $type = 'date'; } else { $type = 'text'; } return $type; }
protected function _defineField(ARField $field, $autoincrement = true, $not_null = true) { $sql = ''; $type = $field->getDataType(); $length = $type->getLength(); if (!empty($length)) { $length = "(" . $length . ") "; } else { $length = " "; } if ($autoincrement) { if ($field instanceof ARPrimaryKeyField) { return $sql . "serial NOT NULL "; } } switch (get_class($type)) { case 'Integer': $sql .= "numeric" . $length; break; case 'Bool': $sql .= "numeric(1) "; break; case 'Binary': $sql .= "bit" . $length; break; case 'DateTime': $sql .= "timestamp "; break; case 'Float': $sql .= "float "; break; default: //integer, varchar, char, time, datetime, date $sql .= get_class($type) . $length; break; } if ($not_null) { $sql .= "NOT NULL "; } return $sql; }
/** * Creates ARForeignKeyField instance * * @param string $fieldName * @param string $foreignTableName * @param string $foreignClassName * @param int $dataType * @param int $typeLength */ public function __construct($fieldName, $foreignTableName, $foreignFieldName, $foreignClassName = null, ARSchemaDataType $dataType) { parent::__construct($fieldName, $dataType); $this->foreignClassName = !empty($foreignClassName) ? $foreignClassName : $foreignTableName; $this->foreignTableName = $foreignTableName; $this->foreignFieldName = $foreignFieldName; $this->referenceFieldName = $this->referenceName = ucfirst(substr($this->name, 0, -2)); if (!$this->referenceName) { $this->referenceName = $this->foreignClassName; } if (!$this->referenceFieldName) { $this->referenceFieldName = $this->name; } if ($this->foreignClassName != $this->referenceName) { $this->referenceName = $this->foreignClassName . '_' . $this->referenceName; } }
protected function _defineField(ARField $field, $auto_increment = true) { $sql = ''; $type = $field->getDataType(); $type_name = strtolower(get_class($field->getDataType())); $length_value = $type->getLength(); if (!empty($length_value)) { $length = "(" . $length_value . ") "; } else { $length = " "; } if ($length_value > 255 && ($type_name == 'char' || $type_name == 'varchar')) { $sql = 'text '; } else { switch ($type_name) { case 'bool': $sql .= "integer(1) "; break; case 'float': $sql .= "float "; break; case 'char': case 'binary': $sql .= 'var' . $type_name . $length; break; default: //integer, varchar, time, datetime, date $sql .= $type_name . $length; break; } } $sql .= "NOT NULL "; if ($auto_increment && $field instanceof ARPrimaryKeyField) { $sql .= "AUTO_INCREMENT "; } return $sql; }