'alveolata', 'sections' => [ [ 'name' => 'storage', 'sections' => [ [ 'name' => 'sqltablecluster', 'setup' => function (&$environment) { $environment['path_database'] = '/tmp/localdb.sqlite'; exec(sprintf('echo "" > %s', $environment['path_database'])); $database = \alveolata\database\make( 'sqlite', [ 'path' => $environment['path_database'], ] ); $database->query( 'CREATE TABLE fehuz( id INTEGER PRIMARY KEY AUTOINCREMENT, value TEXT );', [] ); $database->query( 'CREATE TABLE uruz( id INTEGER PRIMARY KEY AUTOINCREMENT, fehuz_id INTEGER NOT NULL, value TEXT );', [] ); $database->query( 'CREATE TABLE thurisaz( id INTEGER PRIMARY KEY AUTOINCREMENT, value TEXT );', [] ); $database->query( 'CREATE TABLE ansuz( id INTEGER PRIMARY KEY AUTOINCREMENT, fehuz_id INTEGER NOT NULL, thurisaz_id INTEGER NOT NULL, FOREIGN KEY (fehuz_id) REFERENCES fehuz(id), FOREIGN KEY (thurisaz_id) REFERENCES thurisaz(id) );', [] ); $sqltable_thurisaz = \alveolata\storage\implementation_sqltable::make( $database, 'thurisaz' ); $sqltablecluster = \alveolata\storage\implementation_sqltablecluster::make( \alveolata\storage\implementation_sqltable::make( $database, 'fehuz' ), [ 'uruz' => [ 'target_table' => \alveolata\storage\implementation_sqltable::make( $database, 'uruz' ), 'core_id_column' => 'fehuz_id', 'include_own_id' => false, 'exclude_core_id' => false, ] ], [ 'thurisaz' => [ 'target_table' => $sqltable_thurisaz, 'edge_table' => \alveolata\storage\implementation_sqltable::make( $database, 'ansuz' ), 'core_id_column' => 'fehuz_id', 'target_id_column' => 'thurisaz_id', ] ], function ($stuff) { return [ 'fehuz' => $stuff['core_row']['value'], 'uruz' => \alveolata\list_\map( $stuff['tight_supplement_values']['uruz'], function ($x) {return $x['value'];} ), 'thurisaz' => \alveolata\list_\map( $stuff['loose_supplement_values']['thurisaz'], function ($x) {return $x['value'];} ), ]; }, function ($value) { return [ 'core_row' => [ 'value' => $value['fehuz'], ], 'tight_supplement_values' => [ 'uruz' => \alveolata\list_\map( $value['uruz'], function ($x) {return ['value' => $x];} ), ], 'loose_supplement_values' => [ 'thurisaz' => \alveolata\list_\map( $value['thurisaz'], function ($x) {return ['value' => $x];} ), ], ]; } ); $environment['sqltable_thurisaz'] = $sqltable_thurisaz; $environment['storage'] = $sqltablecluster; }, 'sections' => [ [ 'name' => 'create_delete', 'cases' => [ [ 'name' => 'test', 'procedure' => function ($assert, $environment) { // constants $value = [ 'fehuz' => 'fehuz', 'uruz' => [ 'uruz1', 'uruz2', ], 'thurisaz' => [ // 'thurisaz1', // 'thurisaz2', ], ]; // execution & assertions $assert->runs( function () use (&$environment, &$value) { $key = $environment['storage']->create($value); $environment['storage']->delete($key); } ); } ], ] ], [ 'name' => 'read', 'cases' => [ [ 'name' => 'test', 'procedure' => function ($assert, $environment) { // constants $value = [ 'fehuz' => 'fehuz', 'uruz' => [ 'uruz1', 'uruz2', ], 'thurisaz' => [ // 'thurisaz1', // 'thurisaz2', ], ]; // setup $key = $environment['storage']->create($value); // execution $value_read = $environment['storage']->read($key); // assertions $assert->equal($value_read, $value); // cleanup $environment['storage']->delete($key); } ], ] ], [ 'name' => 'search', 'cases' => [ [ 'name' => 'test', 'procedure' => function ($assert, $environment) { // constants $value = [ 'fehuz' => 'fehuz', 'uruz' => [ 'uruz1', 'uruz2', ], 'thurisaz' => [ // 'thurisaz1', // 'thurisaz2', ], ]; // setup $key = $environment['storage']->create($value); // execution $keys = $environment['storage']->search(['value' => 'fehuz']); // assertions $assert->equal($keys, [$key]); // cleanup $environment['storage']->delete($key); } ], ] ], /* [ 'name' => 'update', 'cases' => [ [ 'name' => 'test', 'procedure' => function ($assert, $environment) { // constants $value1 = [ 'foo' => 'Foo', 'bar' => [['val' => 0], ['val' => 2]], 'baz' => [['val' => 1], ['val' => 3]], ]; $value2 = [ 'foo' => 'Fox', 'bar' => [['val' => 4], ['val' => 6]], 'baz' => [['val' => 5], ['val' => 7]], ]; // setup $key = $environment['storage']->create($value1); // execution $environment['storage']->update($key, $value2); $value_read = $environment['storage']->read($key); // assertions $assert->equal($value_read, $value2); // cleanup $environment['storage']->delete($key); } ], ] ], */ ], 'cleanup' => function (&$environment) { // $environment['storage']->teardown(); exec(sprintf('rm -f %s', $environment['path_database'])); } ] ] ], ] ] );