From f66ac02bcd5a2365cfa8bcd4e0aef414eaaf3331 Mon Sep 17 00:00:00 2001 From: Dave Mc Nicoll Date: Tue, 30 May 2023 15:36:01 -0400 Subject: [PATCH] - Working on databases migrations --- src/Form/Database.php | 122 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 src/Form/Database.php diff --git a/src/Form/Database.php b/src/Form/Database.php new file mode 100644 index 0000000..ff1ef14 --- /dev/null +++ b/src/Form/Database.php @@ -0,0 +1,122 @@ +migration = $migration; + } + + public function initialize(FormContextInterface $context) : void + { + $context->tableExist = []; + + foreach($this->migration->entities as $entity => $table) { + $adapter = $entity::resolveEntity()->sqlAdapter()->adapter(); + + $tableName = $table->tableName(); + $databaseName = $table->databaseName(); + + if ( ! $tableName || ! $databaseName ) { + continue; + } + +#<<<<<<< HEAD + $tableEntity = $adapter->schemaTable($databaseName, $tableName); + + if ( $tableEntity ) { + #$fields = $entiy::resolveEntity()->fieldList(); + + foreach($tableEntity->columns as $col) { + //dump( $entity::field($col->name) ); +#======= +# $table = Table::repository() +# ->where(Table::field('name'), $table->tableName()) +# ->where(Table::field('schema'), $table->databaseName()) +# ->loadOne(); + +# if ( $table ) { +# $fields = $entity::resolveEntity()->fieldList(EntityResolver::KEY_COLUMN_NAME, true); + +# $alter = []; + +# foreach($fields as $field => $definition) { +# if ( $table->columns->filtersCollection(fn($e) => $e->name === $field)->count() === 0 ) { +# $alter[$field] = $definition; +# } +#>>>>>>> 7194a33bec884d745e838c8ac2693b353e95a3ce + } + + if ( $alter ) { + $context->status[$entity] = [ + 'msg' => "alter", + "query" => $entity::repository()->alterSqlQuery($alter)->getSqlQuery(true), + ]; + } + else { + # if columns are different + $context->status[$entity] = [ + 'msg' => "up-to-date", + 'query' => "", + ]; + } + } + else { + $context->status[$entity] = [ + 'msg' => "unexisting", + 'query' => $entity::repository()->createSqlQuery()->getSqlQuery(true), + ]; + + } + } + + if ( $context->formSent() ) { + + } + } + + public function validate(FormContextInterface $context) : bool + { + return $context->valid(); + } + + public function execute(FormContextInterface $context) : void + { + if ( $context->create ?? false ) { + $context->create::repository()->createTable(); + } + elseif ( $context->createAll ?? false ) { + foreach(explode(',', $context->createAll) as $entity) { + $entity::repository()->createTable(); + } + } + elseif ( $context->alter ?? false ) { + + } + + $this->initialize($context); + } + + public function getContext(ServerRequestInterface $request) : FormContextInterface + { + return new class($request) extends FormContext { + + public array $status = []; + + public array $actions = []; + }; + } +}