diff --git a/modules/core/migrations/000-core.js b/modules/core/migrations/000-core.js index 100fd7f9d..ce2bde832 100644 --- a/modules/core/migrations/000-core.js +++ b/modules/core/migrations/000-core.js @@ -82,10 +82,11 @@ exports.up = async knex => { table.specificType( 'path', 'ltree' ) } ) - await knex.schema.createTable( 'object_children', table => { + await knex.schema.createTable( 'object_children_closure', table => { table.string( 'parent' ).notNullable( ) table.string( 'child' ).notNullable( ) - table.index( [ 'parent', 'child' ], 'pc_index' ) + table.integer( 'minDepth' ).defaultTo( 1 ).notNullable() + // table.index( [ 'parent', 'child' ], 'pc_index' ) } ) await knex.raw( `CREATE INDEX tree_path_idx ON object_tree_refs USING gist(path)` ) @@ -140,7 +141,7 @@ exports.down = async knex => { await knex.schema.dropTableIfExists( 'user_commits' ) await knex.schema.dropTableIfExists( 'references' ) await knex.schema.dropTableIfExists( 'object_tree_refs' ) - await knex.schema.dropTableIfExists( 'object_children' ) + await knex.schema.dropTableIfExists( 'object_children_closure' ) await knex.schema.dropTableIfExists( 'objects' ) await knex.schema.dropTableIfExists( 'streams' ) await knex.schema.dropTableIfExists( 'api_tokens' ) diff --git a/modules/core/tests/objects.spec.js b/modules/core/tests/objects.spec.js index c1cab34b8..57a968076 100644 --- a/modules/core/tests/objects.spec.js +++ b/modules/core/tests/objects.spec.js @@ -14,6 +14,9 @@ const { createUser, createToken, revokeToken, revokeTokenById, validateToken, ge const { createStream, getStream, updateStream, deleteStream, getStreamsUser, grantPermissionsStream, revokePermissionsStream } = require( '../streams/services' ) const { createCommit, createObject, createObjects, getObject, getObjects, getObjectChildren } = require( '../objects/services' ) +const sampleObjects = require( './sampleObjectData' ) +// console.log( sampleObjects ) + let sampleCommit = JSON.parse( `{ "Objects": [ { @@ -168,7 +171,8 @@ describe( 'Objects', ( ) => { nextNest: { really: 'cool' } - } + }, + __tree: [ ] } ) // if ( i % 2 === 0 ) @@ -186,10 +190,14 @@ describe( 'Objects', ( ) => { } objs[ i ].__tree = __tree + } else if ( i < objectCount - 2 ) { + objs[ i ].__tree.push( `${i}_hash.${i+1}_hash` ) } } - - // console.log( objs ) + let print = objs.slice( 1, 10 ) + let ttree1 = objs[ 0 ].__tree.slice( 0, 30 ) + console.log( ttree1 ) + console.log( print.map( o => ( { id: o.id, tree: o.__tree } ) ) ) let ids = await createObjects( objs ) // console.log( ids ) diff --git a/modules/core/tests/sampleObjectData.js b/modules/core/tests/sampleObjectData.js new file mode 100644 index 000000000..7c74271e9 --- /dev/null +++ b/modules/core/tests/sampleObjectData.js @@ -0,0 +1,87 @@ +module.exports = JSON.parse( `[ +{ + "name": "depth five", + "hash": "99b77f596443d2a2cf59124dbc6a4a8f", + "speckle_type": "" +}, { + "name": "depth four", + "@detach": { + "speckle_type": "reference", + "referencedId": "99b77f596443d2a2cf59124dbc6a4a8f" + }, + "hash": "c2cdd8d01c219703926f7282db700e14", + "speckle_type": "", + "__tree": [ + "c2cdd8d01c219703926f7282db700e14.99b77f596443d2a2cf59124dbc6a4a8f" + ], + "__closure": { + "99b77f596443d2a2cf59124dbc6a4a8f": 1 + } +}, { + "name": "depth three", + "@detach": { + "speckle_type": "reference", + "referencedId": "c2cdd8d01c219703926f7282db700e14" + }, + "hash": "78af2314eed937c7338fccc4224393c0", + "speckle_type": "", + "__tree": [ + "78af2314eed937c7338fccc4224393c0.c2cdd8d01c219703926f7282db700e14", + "78af2314eed937c7338fccc4224393c0.c2cdd8d01c219703926f7282db700e14.99b77f596443d2a2cf59124dbc6a4a8f" + ], + "__closure": { + "c2cdd8d01c219703926f7282db700e14": 1, + "99b77f596443d2a2cf59124dbc6a4a8f": 2 + } +}, { + "name": "depth two", + "@detach": { + "speckle_type": "reference", + "referencedId": "78af2314eed937c7338fccc4224393c0" + }, + "@joker": [ + { + "speckle_type": "reference", + "referencedId": "99b77f596443d2a2cf59124dbc6a4a8f" + } + ], + "hash": "254cb2d7094eca3c809cdac2ffc4010b", + "speckle_type": "", + "__tree": [ + "254cb2d7094eca3c809cdac2ffc4010b.78af2314eed937c7338fccc4224393c0", + "254cb2d7094eca3c809cdac2ffc4010b.78af2314eed937c7338fccc4224393c0.c2cdd8d01c219703926f7282db700e14", + "254cb2d7094eca3c809cdac2ffc4010b.78af2314eed937c7338fccc4224393c0.c2cdd8d01c219703926f7282db700e14.99b77f596443d2a2cf59124dbc6a4a8f", + "254cb2d7094eca3c809cdac2ffc4010b.99b77f596443d2a2cf59124dbc6a4a8f" + ], + "__closure": { + "78af2314eed937c7338fccc4224393c0": 1, + "c2cdd8d01c219703926f7282db700e14": 2, + "99b77f596443d2a2cf59124dbc6a4a8f": 1 + } +}, { + "name": "depth one", + "@detach": { + "speckle_type": "reference", + "referencedId": "254cb2d7094eca3c809cdac2ffc4010b" + }, + "@joker": { + "speckle_type": "reference", + "referencedId": "99b77f596443d2a2cf59124dbc6a4a8f" + }, + "hash": "d2b9e647cb345673ff2b35ccab45ffc2", + "speckle_type": "", + "__tree": [ + "d2b9e647cb345673ff2b35ccab45ffc2.254cb2d7094eca3c809cdac2ffc4010b", + "d2b9e647cb345673ff2b35ccab45ffc2.254cb2d7094eca3c809cdac2ffc4010b.78af2314eed937c7338fccc4224393c0", + "d2b9e647cb345673ff2b35ccab45ffc2.254cb2d7094eca3c809cdac2ffc4010b.78af2314eed937c7338fccc4224393c0.c2cdd8d01c219703926f7282db700e14", + "d2b9e647cb345673ff2b35ccab45ffc2.254cb2d7094eca3c809cdac2ffc4010b.78af2314eed937c7338fccc4224393c0.c2cdd8d01c219703926f7282db700e14.99b77f596443d2a2cf59124dbc6a4a8f", + "d2b9e647cb345673ff2b35ccab45ffc2.254cb2d7094eca3c809cdac2ffc4010b.99b77f596443d2a2cf59124dbc6a4a8f", + "d2b9e647cb345673ff2b35ccab45ffc2.99b77f596443d2a2cf59124dbc6a4a8f" + ], + "__closure": { + "254cb2d7094eca3c809cdac2ffc4010b": 1, + "78af2314eed937c7338fccc4224393c0": 2, + "c2cdd8d01c219703926f7282db700e14": 3, + "99b77f596443d2a2cf59124dbc6a4a8f": 1 + } +} ]` ) \ No newline at end of file