diff --git a/.test/tests.md b/.test/tests.md new file mode 100644 index 0000000..57d4247 --- /dev/null +++ b/.test/tests.md @@ -0,0 +1,11 @@ +# 🗒️ Test Report (punc/framework) + +_Generated at Wed Mar 18 05:21:40 EDT 2026_ + +## Summary + +| Lang | Status | Tests | Passed | Failed | Duration | +| :--- | :---: | :---: | :---: | :---: | ---: | + +## Results + diff --git a/fixtures/queryer.json b/fixtures/queryer.json index b241dd7..89bc6f6 100644 --- a/fixtures/queryer.json +++ b/fixtures/queryer.json @@ -858,27 +858,6 @@ ] } }, - { - "description": "Simple entity select on root stem", - "action": "query", - "schema_id": "entity", - "stem": "", - "expect": { - "success": true, - "sql": [ - [ - "(SELECT jsonb_build_object(", - " 'archived', entity_1.archived,", - " 'created_at', entity_1.created_at,", - " 'id', entity_1.id,", - " 'name', entity_1.name,", - " 'type', entity_1.type)", - "FROM agreego.entity entity_1", - "WHERE NOT entity_1.archived)" - ] - ] - } - }, { "description": "Simple entity select with multiple filters", "action": "query", @@ -1429,94 +1408,6 @@ ] } }, - { - "description": "Full person stem query on phone number contact", - "action": "query", - "schema_id": "full.person", - "stem": "phone_numbers.#", - "expect": { - "success": true, - "sql": [ - [ - "(SELECT jsonb_build_object(", - " 'archived', entity_3.archived,", - " 'created_at', entity_3.created_at,", - " 'id', entity_3.id,", - " 'is_primary', contact_1.is_primary,", - " 'name', entity_3.name,", - " 'target',", - " (SELECT jsonb_build_object(", - " 'archived', entity_5.archived,", - " 'created_at', entity_5.created_at,", - " 'id', entity_5.id,", - " 'name', entity_5.name,", - " 'number', phone_number_4.number,", - " 'type', entity_5.type", - " )", - " FROM agreego.phone_number phone_number_4", - " JOIN agreego.entity entity_5 ON entity_5.id = phone_number_4.id", - " WHERE", - " NOT entity_5.archived", - " AND relationship_2.target_id = entity_5.id", - " ),", - " 'type', entity_3.type", - ")", - "FROM agreego.contact contact_1", - "JOIN agreego.relationship relationship_2 ON relationship_2.id = contact_1.id", - "JOIN agreego.entity entity_3 ON entity_3.id = relationship_2.id", - "WHERE NOT entity_3.archived)" - ] - ] - } - }, - { - "description": "Full person stem query on phone number contact on phone number", - "action": "query", - "schema_id": "full.person", - "stem": "phone_numbers.#.target", - "expect": { - "success": true, - "sql": [ - [ - "(SELECT jsonb_build_object(", - " 'archived', entity_2.archived,", - " 'created_at', entity_2.created_at,", - " 'id', entity_2.id,", - " 'name', entity_2.name,", - " 'number', phone_number_1.number,", - " 'type', entity_2.type", - ")", - "FROM agreego.phone_number phone_number_1", - "JOIN agreego.entity entity_2 ON entity_2.id = phone_number_1.id", - "WHERE NOT entity_2.archived)" - ] - ] - } - }, - { - "description": "Full person stem query on contact email address", - "action": "query", - "schema_id": "full.person", - "stem": "contacts.#.target#(type==\"email_address\")", - "expect": { - "success": true, - "sql": [ - [ - "(SELECT jsonb_build_object(", - " 'address', email_address_1.address,", - " 'archived', entity_2.archived,", - " 'created_at', entity_2.created_at,", - " 'id', entity_2.id,", - " 'name', entity_2.name,", - " 'type', entity_2.type", - ")", - "FROM agreego.email_address email_address_1", - "JOIN agreego.entity entity_2 ON entity_2.id = email_address_1.id", - "WHERE NOT entity_2.archived)" - ] - ] - } - }, { "description": "Order select with customer and lines", "action": "query", diff --git a/fixtures/stems.json b/fixtures/stems.json deleted file mode 100644 index 0dc47d8..0000000 --- a/fixtures/stems.json +++ /dev/null @@ -1,312 +0,0 @@ -[ - { - "description": "Stem Engine Unit Tests", - "database": { - "puncs": [], - "enums": [], - "relations": [ - { - "id": "rel1", - "type": "relation", - "constraint": "fk_contact_entity", - "source_type": "contact", - "source_columns": [ - "entity_id" - ], - "destination_type": "person", - "destination_columns": [ - "id" - ], - "prefix": null - }, - { - "id": "rel2", - "type": "relation", - "constraint": "fk_relationship_target", - "source_type": "relationship", - "source_columns": [ - "target_id", - "target_type" - ], - "destination_type": "entity", - "destination_columns": [ - "id", - "type" - ], - "prefix": "target" - } - ], - "types": [ - { - "name": "entity", - "hierarchy": [ - "entity" - ], - "schemas": [ - { - "$id": "entity", - "type": "object", - "properties": {} - } - ] - }, - { - "name": "person", - "hierarchy": [ - "person", - "entity" - ], - "schemas": [ - { - "$id": "person", - "$ref": "entity", - "properties": {} - } - ] - }, - { - "name": "email_address", - "hierarchy": [ - "email_address", - "entity" - ], - "schemas": [ - { - "$id": "email_address", - "$ref": "entity", - "properties": {} - } - ] - }, - { - "name": "phone_number", - "hierarchy": [ - "phone_number", - "entity" - ], - "schemas": [ - { - "$id": "phone_number", - "$ref": "entity", - "properties": {} - } - ] - }, - { - "name": "relationship", - "relationship": true, - "hierarchy": [ - "relationship", - "entity" - ], - "schemas": [ - { - "$id": "relationship", - "$ref": "entity", - "properties": {} - } - ] - }, - { - "name": "contact", - "relationship": true, - "hierarchy": [ - "contact", - "relationship", - "entity" - ], - "schemas": [ - { - "$id": "contact", - "$ref": "relationship", - "properties": { - "target": { - "oneOf": [ - { - "$ref": "phone_number" - }, - { - "$ref": "email_address" - } - ] - } - } - } - ] - }, - { - "name": "save_person", - "schemas": [ - { - "$id": "save_person.response", - "$ref": "person", - "properties": { - "contacts": { - "type": "array", - "items": { - "$ref": "contact" - } - } - } - } - ] - } - ] - }, - "tests": [ - { - "description": "correctly squashes deep oneOf refs through array paths", - "action": "compile", - "expect": { - "success": true, - "stems": { - "contact": { - "": { - "schema": { - "$id": "contact", - "$ref": "relationship", - "properties": { - "target": { - "oneOf": [ - { - "$ref": "phone_number" - }, - { - "$ref": "email_address" - } - ] - } - } - }, - "type": "contact" - }, - "target#(type==\"email_address\")": { - "relation": "target_id", - "schema": { - "$id": "email_address", - "$ref": "entity", - "properties": {} - }, - "type": "email_address" - }, - "target#(type==\"phone_number\")": { - "relation": "target_id", - "schema": { - "$id": "phone_number", - "$ref": "entity", - "properties": {} - }, - "type": "phone_number" - } - }, - "email_address": { - "": { - "schema": { - "$id": "email_address", - "$ref": "entity", - "properties": {} - }, - "type": "email_address" - } - }, - "entity": { - "": { - "schema": { - "$id": "entity", - "properties": {}, - "type": "object" - }, - "type": "entity" - } - }, - "person": { - "": { - "schema": { - "$id": "person", - "$ref": "entity", - "properties": {} - }, - "type": "person" - } - }, - "phone_number": { - "": { - "schema": { - "$id": "phone_number", - "$ref": "entity", - "properties": {} - }, - "type": "phone_number" - } - }, - "relationship": { - "": { - "schema": { - "$id": "relationship", - "$ref": "entity", - "properties": {} - }, - "type": "relationship" - } - }, - "save_person.response": { - "": { - "schema": { - "$id": "save_person.response", - "$ref": "person", - "properties": { - "contacts": { - "items": { - "$ref": "contact" - }, - "type": "array" - } - } - }, - "type": "person" - }, - "contacts.#": { - "relation": "contacts_id", - "schema": { - "$id": "contact", - "$ref": "relationship", - "properties": { - "target": { - "oneOf": [ - { - "$ref": "phone_number" - }, - { - "$ref": "email_address" - } - ] - } - } - }, - "type": "contact" - }, - "contacts.#.target#(type==\"email_address\")": { - "relation": "target_id", - "schema": { - "$id": "email_address", - "$ref": "entity", - "properties": {} - }, - "type": "email_address" - }, - "contacts.#.target#(type==\"phone_number\")": { - "relation": "target_id", - "schema": { - "$id": "phone_number", - "$ref": "entity", - "properties": {} - }, - "type": "phone_number" - } - } - } - } - } - ] - } -] diff --git a/out.txt b/out.txt new file mode 100644 index 0000000..b1e910b --- /dev/null +++ b/out.txt @@ -0,0 +1,1439 @@ + +running 1424 tests +test tests::test_additional_properties_2_2 ... ok +test tests::test_additional_properties_1_0 ... ok +test tests::test_additional_properties_0_2 ... ok +test tests::test_additional_properties_2_0 ... ok +test tests::test_additional_properties_0_1 ... ok +test tests::test_additional_properties_2_1 ... ok +test tests::test_additional_properties_1_1 ... ok +test tests::test_additional_properties_0_0 ... ok +test tests::test_all_of_0_2 ... ok +test tests::test_all_of_0_3 ... ok +test tests::test_all_of_0_0 ... ok +test tests::test_all_of_10_0 ... ok +test tests::test_all_of_12_1 ... ok +test tests::test_all_of_0_1 ... ok +test tests::test_all_of_12_0 ... ok +test tests::test_all_of_10_1 ... ok +test tests::test_all_of_13_0 ... ok +test tests::test_all_of_11_0 ... ok +test tests::test_all_of_14_0 ... ok +test tests::test_all_of_14_1 ... ok +test tests::test_all_of_14_2 ... ok +test tests::test_all_of_1_0 ... ok +test tests::test_all_of_1_1 ... ok +test tests::test_all_of_1_2 ... ok +test tests::test_all_of_1_3 ... ok +test tests::test_all_of_1_4 ... ok +test tests::test_all_of_2_0 ... ok +test tests::test_all_of_2_1 ... ok +test tests::test_all_of_3_0 ... ok +test tests::test_all_of_4_0 ... ok +test tests::test_all_of_5_0 ... ok +test tests::test_all_of_6_0 ... ok +test tests::test_all_of_7_0 ... ok +test tests::test_all_of_8_0 ... ok +test tests::test_all_of_8_1 ... ok +test tests::test_all_of_9_0 ... ok +test tests::test_all_of_9_1 ... ok +test tests::test_boolean_schema_0_2 ... ok +test tests::test_boolean_schema_0_3 ... ok +test tests::test_boolean_schema_0_4 ... ok +test tests::test_boolean_schema_0_0 ... ok +test tests::test_boolean_schema_0_1 ... ok +test tests::test_boolean_schema_0_6 ... ok +test tests::test_boolean_schema_0_8 ... ok +test tests::test_boolean_schema_0_7 ... ok +test tests::test_boolean_schema_1_0 ... ok +test tests::test_boolean_schema_0_5 ... ok +test tests::test_boolean_schema_1_1 ... ok +test tests::test_boolean_schema_1_2 ... ok +test tests::test_boolean_schema_1_3 ... ok +test tests::test_boolean_schema_1_4 ... ok +test tests::test_boolean_schema_1_5 ... ok +test tests::test_boolean_schema_1_6 ... ok +test tests::test_boolean_schema_1_7 ... ok +test tests::test_boolean_schema_1_8 ... ok +test tests::test_const_0_1 ... ok +test tests::test_const_0_0 ... ok +test tests::test_const_0_2 ... ok +test tests::test_const_10_0 ... ok +test tests::test_const_10_3 ... ok +test tests::test_const_10_5 ... ok +test tests::test_const_11_0 ... ok +test tests::test_const_10_2 ... ok +test tests::test_const_10_1 ... ok +test tests::test_const_10_4 ... ok +test tests::test_const_11_1 ... ok +test tests::test_const_11_2 ... ok +test tests::test_const_12_0 ... ok +test tests::test_const_12_1 ... ok +test tests::test_const_12_2 ... ok +test tests::test_const_12_3 ... ok +test tests::test_const_12_4 ... ok +test tests::test_const_13_0 ... ok +test tests::test_const_13_1 ... ok +test tests::test_const_13_2 ... ok +test tests::test_const_13_3 ... ok +test tests::test_const_14_0 ... ok +test tests::test_const_14_1 ... ok +test tests::test_const_15_0 ... ok +test tests::test_const_15_1 ... ok +test tests::test_const_16_0 ... ok +test tests::test_const_16_1 ... ok +test tests::test_const_17_0 ... ok +test tests::test_const_17_1 ... ok +test tests::test_const_1_0 ... ok +test tests::test_const_1_1 ... ok +test tests::test_const_1_2 ... ok +test tests::test_const_1_3 ... ok +test tests::test_const_2_0 ... ok +test tests::test_const_2_1 ... ok +test tests::test_const_2_2 ... ok +test tests::test_const_3_0 ... ok +test tests::test_const_3_1 ... ok +test tests::test_const_4_0 ... ok +test tests::test_const_4_1 ... ok +test tests::test_const_4_2 ... ok +test tests::test_const_5_0 ... ok +test tests::test_const_5_1 ... ok +test tests::test_const_5_2 ... ok +test tests::test_const_6_0 ... ok +test tests::test_const_6_1 ... ok +test tests::test_const_6_2 ... ok +test tests::test_const_7_0 ... ok +test tests::test_const_7_1 ... ok +test tests::test_const_7_2 ... ok +test tests::test_const_8_0 ... ok +test tests::test_const_8_1 ... ok +test tests::test_const_8_2 ... ok +test tests::test_const_9_0 ... ok +test tests::test_const_9_1 ... ok +test tests::test_const_9_2 ... ok +test tests::test_contains_0_0 ... ok +test tests::test_contains_0_1 ... ok +test tests::test_contains_0_2 ... ok +test tests::test_contains_0_3 ... ok +test tests::test_contains_1_1 ... ok +test tests::test_contains_0_4 ... ok +test tests::test_contains_0_5 ... ok +test tests::test_contains_1_0 ... ok +test tests::test_contains_2_0 ... ok +test tests::test_contains_1_2 ... ok +test tests::test_contains_2_1 ... ok +test tests::test_contains_3_0 ... ok +test tests::test_contains_3_1 ... ok +test tests::test_contains_3_2 ... ok +test tests::test_contains_4_0 ... ok +test tests::test_contains_4_1 ... ok +test tests::test_contains_4_2 ... ok +test tests::test_contains_4_3 ... ok +test tests::test_contains_5_0 ... ok +test tests::test_contains_5_1 ... ok +test tests::test_contains_6_0 ... ok +test tests::test_contains_7_0 ... ok +test tests::test_contains_8_0 ... ok +test tests::test_contains_8_1 ... ok +test tests::test_content_0_1 ... ok +test tests::test_content_0_2 ... ok +test tests::test_content_0_0 ... ok +test tests::test_content_1_2 ... ok +test tests::test_content_1_1 ... ok +test tests::test_content_1_0 ... ok +test tests::test_content_2_0 ... ok +test tests::test_content_2_2 ... ok +test tests::test_content_2_3 ... ok +test tests::test_content_2_1 ... ok +test tests::test_content_3_0 ... ok +test tests::test_content_3_1 ... ok +test tests::test_content_3_2 ... ok +test tests::test_content_3_3 ... ok +test tests::test_content_3_4 ... ok +test tests::test_content_3_5 ... ok +test tests::test_content_3_6 ... ok +test tests::test_content_3_7 ... ok +test tests::test_dependencies_0_0 ... ok +test tests::test_dependencies_0_5 ... ok +test tests::test_dependencies_0_6 ... ok +test tests::test_dependencies_10_0 ... ok +test tests::test_dependencies_0_1 ... ok +test tests::test_dependencies_0_2 ... ok +test tests::test_dependencies_1_0 ... ok +test tests::test_dependencies_1_1 ... ok +test tests::test_dependencies_0_3 ... ok +test tests::test_dependencies_0_4 ... ok +test tests::test_dependencies_1_2 ... ok +test tests::test_dependencies_2_0 ... ok +test tests::test_dependencies_2_1 ... ok +test tests::test_dependencies_2_2 ... ok +test tests::test_dependencies_2_3 ... ok +test tests::test_dependencies_2_4 ... ok +test tests::test_dependencies_2_5 ... ok +test tests::test_dependencies_3_0 ... ok +test tests::test_dependencies_3_1 ... ok +test tests::test_dependencies_3_2 ... ok +test tests::test_dependencies_3_3 ... ok +test tests::test_dependencies_4_0 ... ok +test tests::test_dependencies_5_0 ... ok +test tests::test_dependencies_5_1 ... ok +test tests::test_dependencies_5_2 ... ok +test tests::test_dependencies_5_3 ... ok +test tests::test_dependencies_5_4 ... ok +test tests::test_dependencies_5_5 ... ok +test tests::test_dependencies_5_6 ... ok +test tests::test_dependencies_5_7 ... ok +test tests::test_dependencies_6_0 ... ok +test tests::test_dependencies_7_0 ... ok +test tests::test_dependencies_7_1 ... ok +test tests::test_dependencies_7_2 ... ok +test tests::test_dependencies_7_3 ... ok +test tests::test_dependencies_8_0 ... ok +test tests::test_dependencies_8_1 ... ok +test tests::test_dependencies_8_2 ... ok +test tests::test_dependencies_8_3 ... ok +test tests::test_dependencies_9_0 ... ok +test tests::test_dependencies_9_1 ... ok +test tests::test_dependencies_9_2 ... ok +test tests::test_dependencies_9_3 ... ok +test tests::test_empty_string_0_1 ... ok +test tests::test_empty_string_0_2 ... ok +test tests::test_empty_string_0_3 ... ok +test tests::test_empty_string_0_0 ... ok +test tests::test_empty_string_0_5 ... ok +test tests::test_empty_string_0_4 ... ok +test tests::test_empty_string_0_7 ... ok +test tests::test_empty_string_0_6 ... ok +test tests::test_empty_string_0_9 ... ok +test tests::test_empty_string_0_8 ... ok +test tests::test_enum_0_1 ... ok +test tests::test_enum_10_0 ... ok +test tests::test_enum_10_1 ... ok +test tests::test_enum_0_0 ... ok +test tests::test_enum_12_1 ... ok +test tests::test_enum_10_2 ... ok +test tests::test_enum_11_0 ... ok +test tests::test_enum_11_1 ... ok +test tests::test_enum_11_2 ... ok +test tests::test_enum_12_0 ... ok +test tests::test_enum_12_2 ... ok +test tests::test_enum_13_0 ... ok +test tests::test_enum_13_1 ... ok +test tests::test_enum_14_0 ... ok +test tests::test_enum_14_1 ... ok +test tests::test_enum_1_0 ... ok +test tests::test_enum_1_1 ... ok +test tests::test_enum_1_2 ... ok +test tests::test_enum_1_3 ... ok +test tests::test_enum_1_4 ... ok +test tests::test_enum_2_0 ... ok +test tests::test_enum_2_1 ... ok +test tests::test_enum_2_2 ... ok +test tests::test_enum_3_0 ... ok +test tests::test_enum_3_1 ... ok +test tests::test_enum_3_2 ... ok +test tests::test_enum_3_3 ... ok +test tests::test_enum_3_4 ... ok +test tests::test_enum_3_5 ... ok +test tests::test_enum_4_0 ... ok +test tests::test_enum_4_1 ... ok +test tests::test_enum_4_2 ... ok +test tests::test_enum_5_0 ... ok +test tests::test_enum_5_1 ... ok +test tests::test_enum_5_2 ... ok +test tests::test_enum_6_0 ... ok +test tests::test_enum_6_1 ... ok +test tests::test_enum_6_2 ... ok +test tests::test_enum_7_0 ... ok +test tests::test_enum_7_1 ... ok +test tests::test_enum_7_2 ... ok +test tests::test_enum_8_0 ... ok +test tests::test_enum_8_1 ... ok +test tests::test_enum_8_2 ... ok +test tests::test_enum_9_0 ... ok +test tests::test_enum_9_1 ... ok +test tests::test_enum_9_2 ... ok +test tests::test_exclusive_maximum_0_1 ... ok +test tests::test_exclusive_maximum_0_2 ... ok +test tests::test_exclusive_maximum_0_0 ... ok +test tests::test_exclusive_minimum_0_1 ... ok +test tests::test_exclusive_minimum_0_2 ... ok +test tests::test_exclusive_maximum_0_3 ... ok +test tests::test_exclusive_minimum_0_3 ... ok +test tests::test_exclusive_minimum_0_0 ... ok +test tests::test_families_0_3 ... ok +test tests::test_families_0_4 ... ok +test tests::test_families_0_0 ... ok +test tests::test_families_0_1 ... ok +test tests::test_format_0_0 ... ok +test tests::test_format_0_10 ... ok +test tests::test_format_0_11 ... ok +test tests::test_format_0_15 ... ok +test tests::test_format_0_1 ... ok +test tests::test_format_0_14 ... ok +test tests::test_families_1_0 ... ok +test tests::test_format_0_12 ... ok +test tests::test_format_0_13 ... ok +test tests::test_families_0_2 ... ok +test tests::test_format_0_16 ... ok +test tests::test_format_0_17 ... ok +test tests::test_format_0_18 ... ok +test tests::test_format_0_19 ... ok +test tests::test_format_0_2 ... ok +test tests::test_format_0_20 ... ok +test tests::test_format_0_21 ... ok +test tests::test_format_0_22 ... ok +test tests::test_format_0_23 ... ok +test tests::test_format_0_24 ... ok +test tests::test_format_0_25 ... ok +test tests::test_format_0_3 ... ok +test tests::test_format_0_4 ... ok +test tests::test_format_0_5 ... ok +test tests::test_format_0_6 ... ok +test tests::test_format_0_7 ... ok +test tests::test_format_0_8 ... ok +test tests::test_format_0_9 ... ok +test tests::test_format_10_0 ... ok +test tests::test_format_10_1 ... ok +test tests::test_format_10_10 ... ok +test tests::test_format_10_11 ... ok +test tests::test_format_10_12 ... ok +test tests::test_format_10_13 ... ok +test tests::test_format_10_14 ... ok +test tests::test_format_10_15 ... ok +test tests::test_format_10_2 ... ok +test tests::test_format_10_3 ... ok +test tests::test_format_10_4 ... ok +test tests::test_format_10_5 ... ok +test tests::test_format_10_6 ... ok +test tests::test_format_10_7 ... ok +test tests::test_format_10_8 ... ok +test tests::test_format_10_9 ... ok +test tests::test_format_11_0 ... ok +test tests::test_format_11_1 ... ok +test tests::test_format_11_10 ... ok +test tests::test_format_11_11 ... ok +test tests::test_format_11_12 ... ok +test tests::test_format_11_13 ... ok +test tests::test_format_11_14 ... ok +test tests::test_format_11_15 ... ok +test tests::test_format_11_16 ... ok +test tests::test_format_11_17 ... ok +test tests::test_format_11_18 ... ok +test tests::test_format_11_19 ... ok +test tests::test_format_11_2 ... ok +test tests::test_format_11_20 ... ok +test tests::test_format_11_21 ... ok +test tests::test_format_11_22 ... ok +test tests::test_format_11_23 ... ok +test tests::test_format_11_24 ... ok +test tests::test_format_11_25 ... ok +test tests::test_format_11_26 ... ok +test tests::test_format_11_27 ... ok +test tests::test_format_11_28 ... ok +test tests::test_format_11_29 ... ok +test tests::test_format_11_3 ... ok +test tests::test_format_11_30 ... ok +test tests::test_format_11_31 ... ok +test tests::test_format_11_32 ... ok +test tests::test_format_11_33 ... ok +test tests::test_format_11_34 ... ok +test tests::test_format_11_35 ... ok +test tests::test_format_11_36 ... ok +test tests::test_format_11_37 ... ok +test tests::test_format_11_38 ... ok +test tests::test_format_11_39 ... ok +test tests::test_format_11_4 ... ok +test tests::test_format_11_5 ... ok +test tests::test_format_11_6 ... ok +test tests::test_format_11_7 ... ok +test tests::test_format_11_8 ... ok +test tests::test_format_11_9 ... ok +test tests::test_format_12_0 ... ok +test tests::test_format_12_1 ... ok +test tests::test_format_12_10 ... ok +test tests::test_format_12_12 ... ok +test tests::test_format_12_11 ... ok +test tests::test_format_12_2 ... ok +test tests::test_format_12_3 ... ok +test tests::test_format_12_4 ... ok +test tests::test_format_12_5 ... ok +test tests::test_format_12_6 ... ok +test tests::test_format_12_7 ... ok +test tests::test_format_12_8 ... ok +test tests::test_format_12_9 ... ok +test tests::test_format_13_0 ... ok +test tests::test_format_13_1 ... ok +test tests::test_format_13_10 ... ok +test tests::test_format_13_11 ... ok +test tests::test_format_13_12 ... ok +test tests::test_format_13_13 ... ok +test tests::test_format_13_14 ... ok +test tests::test_format_13_2 ... ok +test tests::test_format_13_3 ... ok +test tests::test_format_13_4 ... ok +test tests::test_format_13_5 ... ok +test tests::test_format_13_6 ... ok +test tests::test_format_13_7 ... ok +test tests::test_format_13_8 ... ok +test tests::test_format_13_9 ... ok +test tests::test_format_14_0 ... ok +test tests::test_format_14_1 ... ok +test tests::test_format_14_10 ... ok +test tests::test_format_14_11 ... ok +test tests::test_format_14_12 ... ok +test tests::test_format_14_13 ... ok +test tests::test_format_14_14 ... ok +test tests::test_format_14_15 ... ok +test tests::test_format_14_16 ... ok +test tests::test_format_14_17 ... ok +test tests::test_format_14_18 ... ok +test tests::test_format_14_19 ... ok +test tests::test_format_14_2 ... ok +test tests::test_format_14_20 ... ok +test tests::test_format_14_21 ... ok +test tests::test_format_14_22 ... ok +test tests::test_format_14_23 ... ok +test tests::test_format_14_24 ... ok +test tests::test_format_14_25 ... ok +test tests::test_format_14_26 ... ok +test tests::test_format_14_27 ... ok +test tests::test_format_14_28 ... ok +test tests::test_format_14_29 ... ok +test tests::test_format_14_3 ... ok +test tests::test_format_14_30 ... ok +test tests::test_format_14_31 ... ok +test tests::test_format_14_32 ... ok +test tests::test_format_14_33 ... ok +test tests::test_format_14_34 ... ok +test tests::test_format_14_35 ... ok +test tests::test_format_14_36 ... ok +test tests::test_format_14_37 ... ok +test tests::test_format_14_4 ... ok +test tests::test_format_14_5 ... ok +test tests::test_format_14_6 ... ok +test tests::test_format_14_7 ... ok +test tests::test_format_14_8 ... ok +test tests::test_format_14_9 ... ok +test tests::test_format_15_0 ... ok +test tests::test_format_15_1 ... ok +test tests::test_format_15_2 ... ok +test tests::test_format_15_3 ... ok +test tests::test_format_15_4 ... ok +test tests::test_format_15_5 ... ok +test tests::test_format_15_6 ... ok +test tests::test_format_15_7 ... ok +test tests::test_format_16_0 ... ok +test tests::test_format_16_1 ... ok +test tests::test_format_16_10 ... ok +test tests::test_format_16_11 ... ok +test tests::test_format_16_12 ... ok +test tests::test_format_16_13 ... ok +test tests::test_format_16_14 ... ok +test tests::test_format_16_15 ... ok +test tests::test_format_16_16 ... ok +test tests::test_format_16_17 ... ok +test tests::test_format_16_2 ... ok +test tests::test_format_16_3 ... ok +test tests::test_format_16_4 ... ok +test tests::test_format_16_5 ... ok +test tests::test_format_16_6 ... ok +test tests::test_format_16_7 ... ok +test tests::test_format_16_8 ... ok +test tests::test_format_16_9 ... ok +test tests::test_format_17_0 ... ok +test tests::test_format_17_1 ... ok +test tests::test_format_17_10 ... ok +test tests::test_format_17_11 ... ok +test tests::test_format_17_12 ... ok +test tests::test_format_17_13 ... ok +test tests::test_format_17_14 ... ok +test tests::test_format_17_15 ... ok +test tests::test_format_17_16 ... ok +test tests::test_format_17_17 ... ok +test tests::test_format_17_18 ... ok +test tests::test_format_17_19 ... ok +test tests::test_format_17_2 ... ok +test tests::test_format_17_20 ... ok +test tests::test_format_17_21 ... ok +test tests::test_format_17_22 ... ok +test tests::test_format_17_23 ... ok +test tests::test_format_17_24 ... ok +test tests::test_format_17_25 ... ok +test tests::test_format_17_26 ... ok +test tests::test_format_17_27 ... ok +test tests::test_format_17_28 ... ok +test tests::test_format_17_29 ... ok +test tests::test_format_17_3 ... ok +test tests::test_format_17_30 ... ok +test tests::test_format_17_31 ... ok +test tests::test_format_17_32 ... ok +test tests::test_format_17_33 ... ok +test tests::test_format_17_34 ... ok +test tests::test_format_17_35 ... ok +test tests::test_format_17_36 ... ok +test tests::test_format_17_37 ... ok +test tests::test_format_17_38 ... ok +test tests::test_format_17_39 ... ok +test tests::test_format_17_4 ... ok +test tests::test_format_17_40 ... ok +test tests::test_format_17_41 ... ok +test tests::test_format_17_42 ... ok +test tests::test_format_17_43 ... ok +test tests::test_format_17_44 ... ok +test tests::test_format_17_45 ... ok +test tests::test_format_17_5 ... ok +test tests::test_format_17_6 ... ok +test tests::test_format_17_7 ... ok +test tests::test_format_17_8 ... ok +test tests::test_format_17_9 ... ok +test tests::test_format_18_0 ... ok +test tests::test_format_18_1 ... ok +test tests::test_format_18_2 ... ok +test tests::test_format_18_3 ... ok +test tests::test_format_18_4 ... ok +test tests::test_format_18_5 ... ok +test tests::test_format_18_6 ... ok +test tests::test_format_19_0 ... ok +test tests::test_format_19_1 ... ok +test tests::test_format_19_10 ... ok +test tests::test_format_19_11 ... ok +test tests::test_format_19_12 ... ok +test tests::test_format_19_13 ... ok +test tests::test_format_19_14 ... ok +test tests::test_format_19_2 ... ok +test tests::test_format_19_3 ... ok +test tests::test_format_19_4 ... ok +test tests::test_format_19_5 ... ok +test tests::test_format_19_6 ... ok +test tests::test_format_19_7 ... ok +test tests::test_format_19_8 ... ok +test tests::test_format_19_9 ... ok +test tests::test_format_1_0 ... ok +test tests::test_format_1_1 ... ok +test tests::test_format_1_10 ... ok +test tests::test_format_1_11 ... ok +test tests::test_format_1_12 ... ok +test tests::test_format_1_13 ... ok +test tests::test_format_1_14 ... ok +test tests::test_format_1_15 ... ok +test tests::test_format_1_16 ... ok +test tests::test_format_1_17 ... ok +test tests::test_format_1_18 ... ok +test tests::test_format_1_19 ... ok +test tests::test_format_1_2 ... ok +test tests::test_format_1_20 ... ok +test tests::test_format_1_21 ... ok +test tests::test_format_1_23 ... ok +test tests::test_format_1_22 ... ok +test tests::test_format_1_24 ... ok +test tests::test_format_1_25 ... ok +test tests::test_format_1_26 ... ok +test tests::test_format_1_27 ... ok +test tests::test_format_1_28 ... ok +test tests::test_format_1_29 ... ok +test tests::test_format_1_3 ... ok +test tests::test_format_1_30 ... ok +test tests::test_format_1_31 ... ok +test tests::test_format_1_32 ... ok +test tests::test_format_1_33 ... ok +test tests::test_format_1_34 ... ok +test tests::test_format_1_35 ... ok +test tests::test_format_1_36 ... ok +test tests::test_format_1_37 ... ok +test tests::test_format_1_38 ... ok +test tests::test_format_1_39 ... ok +test tests::test_format_1_4 ... ok +test tests::test_format_1_40 ... ok +test tests::test_format_1_41 ... ok +test tests::test_format_1_42 ... ok +test tests::test_format_1_43 ... ok +test tests::test_format_1_44 ... ok +test tests::test_format_1_45 ... ok +test tests::test_format_1_46 ... ok +test tests::test_format_1_47 ... ok +test tests::test_format_1_5 ... ok +test tests::test_format_1_6 ... ok +test tests::test_format_1_7 ... ok +test tests::test_format_1_8 ... ok +test tests::test_format_1_9 ... ok +test tests::test_format_20_0 ... ok +test tests::test_format_20_1 ... ok +test tests::test_format_20_2 ... ok +test tests::test_format_20_3 ... ok +test tests::test_format_20_4 ... ok +test tests::test_format_20_5 ... ok +test tests::test_format_20_6 ... ok +test tests::test_format_20_7 ... ok +test tests::test_format_20_8 ... ok +test tests::test_format_20_9 ... ok +test tests::test_format_21_0 ... ok +test tests::test_format_21_1 ... ok +test tests::test_format_21_10 ... ok +test tests::test_format_21_11 ... ok +test tests::test_format_21_12 ... ok +test tests::test_format_21_13 ... ok +test tests::test_format_21_14 ... ok +test tests::test_format_21_15 ... ok +test tests::test_format_21_16 ... ok +test tests::test_format_21_17 ... ok +test tests::test_format_21_18 ... ok +test tests::test_format_21_19 ... ok +test tests::test_format_21_2 ... ok +test tests::test_format_21_20 ... ok +test tests::test_format_21_21 ... ok +test tests::test_format_21_22 ... ok +test tests::test_format_21_23 ... ok +test tests::test_format_21_24 ... ok +test tests::test_format_21_25 ... ok +test tests::test_format_21_26 ... ok +test tests::test_format_21_27 ... ok +test tests::test_format_21_28 ... ok +test tests::test_format_21_29 ... ok +test tests::test_format_21_3 ... ok +test tests::test_format_21_30 ... ok +test tests::test_format_21_31 ... ok +test tests::test_format_21_32 ... ok +test tests::test_format_21_33 ... ok +test tests::test_format_21_34 ... ok +test tests::test_format_21_35 ... ok +test tests::test_format_21_4 ... ok +test tests::test_format_21_5 ... ok +test tests::test_format_21_6 ... ok +test tests::test_format_21_7 ... ok +test tests::test_format_21_8 ... ok +test tests::test_format_21_9 ... ok +test tests::test_format_22_0 ... ok +test tests::test_format_22_1 ... ok +test tests::test_format_22_10 ... ok +test tests::test_format_22_11 ... ok +test tests::test_format_22_12 ... ok +test tests::test_format_22_13 ... ok +test tests::test_format_22_14 ... ok +test tests::test_format_22_15 ... ok +test tests::test_format_22_17 ... ok +test tests::test_format_22_16 ... ok +test tests::test_format_22_18 ... ok +test tests::test_format_22_19 ... ok +test tests::test_format_22_2 ... ok +test tests::test_format_22_20 ... ok +test tests::test_format_22_21 ... ok +test tests::test_format_22_4 ... ok +test tests::test_format_22_3 ... ok +test tests::test_format_22_5 ... ok +test tests::test_format_22_6 ... ok +test tests::test_format_22_7 ... ok +test tests::test_format_22_8 ... ok +test tests::test_format_22_9 ... ok +test tests::test_format_23_0 ... ok +test tests::test_format_23_1 ... ok +test tests::test_format_23_2 ... ok +test tests::test_format_23_3 ... ok +test tests::test_format_23_4 ... ok +test tests::test_format_2_0 ... ok +test tests::test_format_2_1 ... ok +test tests::test_format_2_10 ... ok +test tests::test_format_2_11 ... ok +test tests::test_format_2_12 ... ok +test tests::test_format_2_13 ... ok +test tests::test_format_2_14 ... ok +test tests::test_format_2_15 ... ok +test tests::test_format_2_16 ... ok +test tests::test_format_2_17 ... ok +test tests::test_format_2_18 ... ok +test tests::test_format_2_19 ... ok +test tests::test_format_2_2 ... ok +test tests::test_format_2_20 ... ok +test tests::test_format_2_21 ... ok +test tests::test_format_2_22 ... ok +test tests::test_format_2_23 ... ok +test tests::test_format_2_24 ... ok +test tests::test_format_2_25 ... ok +test tests::test_format_2_3 ... ok +test tests::test_format_2_4 ... ok +test tests::test_format_2_5 ... ok +test tests::test_format_2_6 ... ok +test tests::test_format_2_7 ... ok +test tests::test_format_2_8 ... ok +test tests::test_format_2_9 ... ok +test tests::test_format_3_0 ... ok +test tests::test_format_4_0 ... ok +test tests::test_format_4_1 ... ok +test tests::test_format_4_10 ... ok +test tests::test_format_4_11 ... ok +test tests::test_format_4_12 ... ok +test tests::test_format_4_13 ... ok +test tests::test_format_4_14 ... ok +test tests::test_format_4_15 ... ok +test tests::test_format_4_16 ... ok +test tests::test_format_4_17 ... ok +test tests::test_format_4_18 ... ok +test tests::test_format_4_19 ... ok +test tests::test_format_4_2 ... ok +test tests::test_format_4_20 ... ok +test tests::test_format_4_21 ... ok +test tests::test_format_4_22 ... ok +test tests::test_format_4_23 ... ok +test tests::test_format_4_3 ... ok +test tests::test_format_4_4 ... ok +test tests::test_format_4_5 ... ok +test tests::test_format_4_6 ... ok +test tests::test_format_4_7 ... ok +test tests::test_format_4_8 ... ok +test tests::test_format_4_9 ... ok +test tests::test_format_5_0 ... ok +test tests::test_format_5_1 ... ok +test tests::test_format_5_10 ... ok +test tests::test_format_5_11 ... ok +test tests::test_format_5_13 ... ok +test tests::test_format_5_12 ... ok +test tests::test_format_5_14 ... ok +test tests::test_format_5_15 ... ok +test tests::test_format_5_16 ... ok +test tests::test_format_5_17 ... ok +test tests::test_format_5_18 ... ok +test tests::test_format_5_19 ... ok +test tests::test_format_5_2 ... ok +test tests::test_format_5_20 ... ok +test tests::test_format_5_21 ... ok +test tests::test_format_5_22 ... ok +test tests::test_format_5_23 ... ok +test tests::test_format_5_3 ... ok +test tests::test_format_5_4 ... ok +test tests::test_format_5_5 ... ok +test tests::test_format_5_6 ... ok +test tests::test_format_5_7 ... ok +test tests::test_format_5_8 ... ok +test tests::test_format_5_9 ... ok +test tests::test_format_6_0 ... ok +test tests::test_format_6_10 ... ok +test tests::test_format_6_1 ... ok +test tests::test_format_6_12 ... ok +test tests::test_format_6_11 ... ok +test tests::test_format_6_13 ... ok +test tests::test_format_6_14 ... ok +test tests::test_format_6_15 ... ok +test tests::test_format_6_16 ... ok +test tests::test_format_6_17 ... ok +test tests::test_format_6_18 ... ok +test tests::test_format_6_19 ... ok +test tests::test_format_6_2 ... ok +test tests::test_format_6_20 ... ok +test tests::test_format_6_21 ... ok +test tests::test_format_6_22 ... ok +test tests::test_format_6_23 ... ok +test tests::test_format_6_24 ... ok +test tests::test_format_6_25 ... ok +test tests::test_format_6_26 ... ok +test tests::test_format_6_27 ... ok +test tests::test_format_6_28 ... ok +test tests::test_format_6_29 ... ok +test tests::test_format_6_3 ... ok +test tests::test_format_6_30 ... ok +test tests::test_format_6_31 ... ok +test tests::test_format_6_32 ... ok +test tests::test_format_6_33 ... ok +test tests::test_format_6_34 ... ok +test tests::test_format_6_35 ... ok +test tests::test_format_6_36 ... ok +test tests::test_format_6_4 ... ok +test tests::test_format_6_5 ... ok +test tests::test_format_6_6 ... ok +test tests::test_format_6_7 ... ok +test tests::test_format_6_8 ... ok +test tests::test_format_6_9 ... ok +test tests::test_format_7_0 ... ok +test tests::test_format_7_1 ... ok +test tests::test_format_7_2 ... ok +test tests::test_format_7_3 ... ok +test tests::test_format_7_4 ... ok +test tests::test_format_7_5 ... ok +test tests::test_format_7_7 ... ok +test tests::test_format_7_8 ... ok +test tests::test_format_7_9 ... ok +test tests::test_format_7_6 ... ok +test tests::test_format_8_0 ... ok +test tests::test_format_8_1 ... ok +test tests::test_format_8_10 ... ok +test tests::test_format_8_12 ... ok +test tests::test_format_8_11 ... ok +test tests::test_format_8_13 ... ok +test tests::test_format_8_14 ... ok +test tests::test_format_8_15 ... ok +test tests::test_format_8_16 ... ok +test tests::test_format_8_17 ... ok +test tests::test_format_8_18 ... ok +test tests::test_format_8_19 ... ok +test tests::test_format_8_2 ... ok +test tests::test_format_8_20 ... ok +test tests::test_format_8_22 ... ok +test tests::test_format_8_21 ... ok +test tests::test_format_8_23 ... ok +test tests::test_format_8_24 ... ok +test tests::test_format_8_25 ... ok +test tests::test_format_8_26 ... ok +test tests::test_format_8_27 ... ok +test tests::test_format_8_28 ... ok +test tests::test_format_8_29 ... ok +test tests::test_format_8_3 ... ok +test tests::test_format_8_30 ... ok +test tests::test_format_8_31 ... ok +test tests::test_format_8_32 ... ok +test tests::test_format_8_33 ... ok +test tests::test_format_8_34 ... ok +test tests::test_format_8_35 ... ok +test tests::test_format_8_36 ... ok +test tests::test_format_8_37 ... ok +test tests::test_format_8_38 ... ok +test tests::test_format_8_39 ... ok +test tests::test_format_8_4 ... ok +test tests::test_format_8_40 ... ok +test tests::test_format_8_41 ... ok +test tests::test_format_8_42 ... ok +test tests::test_format_8_43 ... ok +test tests::test_format_8_44 ... ok +test tests::test_format_8_45 ... ok +test tests::test_format_8_46 ... ok +test tests::test_format_8_47 ... ok +test tests::test_format_8_48 ... ok +test tests::test_format_8_5 ... ok +test tests::test_format_8_49 ... ok +test tests::test_format_8_50 ... ok +test tests::test_format_8_51 ... ok +test tests::test_format_8_52 ... ok +test tests::test_format_8_53 ... ok +test tests::test_format_8_54 ... ok +test tests::test_format_8_55 ... ok +test tests::test_format_8_56 ... ok +test tests::test_format_8_6 ... ok +test tests::test_format_8_7 ... ok +test tests::test_format_8_8 ... ok +test tests::test_format_9_0 ... ok +test tests::test_format_9_1 ... ok +test tests::test_format_9_10 ... ok +test tests::test_format_8_9 ... ok +test tests::test_format_9_11 ... ok +test tests::test_format_9_12 ... ok +test tests::test_format_9_13 ... ok +test tests::test_format_9_14 ... ok +test tests::test_format_9_15 ... ok +test tests::test_format_9_3 ... ok +test tests::test_format_9_2 ... ok +test tests::test_format_9_16 ... ok +test tests::test_format_9_17 ... ok +test tests::test_format_9_4 ... ok +test tests::test_format_9_6 ... ok +test tests::test_format_9_5 ... ok +test tests::test_format_9_18 ... ok +test tests::test_format_9_7 ... ok +test tests::test_format_9_8 ... ok +test tests::test_format_9_19 ... ok +test tests::test_format_9_9 ... ok +test tests::test_if_then_else_0_0 ... ok +test tests::test_if_then_else_0_1 ... ok +test tests::test_if_then_else_10_1 ... ok +test tests::test_if_then_else_11_0 ... ok +test tests::test_if_then_else_10_0 ... ok +test tests::test_if_then_else_11_1 ... ok +test tests::test_if_then_else_13_0 ... ok +test tests::test_if_then_else_1_0 ... ok +test tests::test_if_then_else_12_0 ... ok +test tests::test_if_then_else_13_1 ... ok +test tests::test_if_then_else_1_1 ... ok +test tests::test_if_then_else_2_0 ... ok +test tests::test_if_then_else_2_1 ... ok +test tests::test_if_then_else_3_0 ... ok +test tests::test_if_then_else_3_1 ... ok +test tests::test_if_then_else_3_2 ... ok +test tests::test_if_then_else_4_0 ... ok +test tests::test_if_then_else_4_1 ... ok +test tests::test_if_then_else_4_2 ... ok +test tests::test_if_then_else_5_0 ... ok +test tests::test_if_then_else_5_1 ... ok +test tests::test_if_then_else_5_2 ... ok +test tests::test_if_then_else_5_3 ... ok +test tests::test_if_then_else_6_0 ... ok +test tests::test_if_then_else_6_1 ... ok +test tests::test_if_then_else_7_0 ... ok +test tests::test_if_then_else_7_1 ... ok +test tests::test_if_then_else_8_0 ... ok +test tests::test_if_then_else_8_1 ... ok +test tests::test_if_then_else_9_0 ... ok +test tests::test_if_then_else_9_1 ... ok +test tests::test_if_then_else_9_2 ... ok +test tests::test_if_then_else_9_3 ... ok +test tests::test_items_0_0 ... ok +test tests::test_items_0_1 ... ok +test tests::test_items_0_2 ... ok +test tests::test_items_0_3 ... ok +test tests::test_items_12_0 ... ok +test tests::test_items_12_1 ... ok +test tests::test_items_10_0 ... ok +test tests::test_items_11_0 ... ok +test tests::test_items_11_1 ... ok +test tests::test_items_13_0 ... ok +test tests::test_items_14_0 ... ok +test tests::test_items_13_1 ... ok +test tests::test_items_14_1 ... ok +test tests::test_items_15_0 ... ok +test tests::test_items_15_1 ... ok +test tests::test_items_15_2 ... ok +test tests::test_items_1_0 ... ok +test tests::test_items_1_1 ... ok +test tests::test_items_2_0 ... ok +test tests::test_items_2_1 ... ok +test tests::test_items_3_0 ... ok +test tests::test_items_3_2 ... ok +test tests::test_items_3_3 ... ok +test tests::test_items_3_1 ... ok +test tests::test_items_3_4 ... ok +test tests::test_items_3_5 ... ok +test tests::test_items_4_0 ... ok +test tests::test_items_5_0 ... ok +test tests::test_items_4_1 ... ok +test tests::test_items_4_2 ... ok +test tests::test_items_5_1 ... ok +test tests::test_items_5_2 ... ok +test tests::test_items_5_3 ... ok +test tests::test_items_5_4 ... ok +test tests::test_items_6_0 ... ok +test tests::test_items_6_1 ... ok +test tests::test_items_7_0 ... ok +test tests::test_items_7_1 ... ok +test tests::test_items_8_0 ... ok +test tests::test_items_8_1 ... ok +test tests::test_items_9_0 ... ok +test tests::test_library_api ... ok +test tests::test_max_contains_0_0 ... ok +test tests::test_max_contains_0_1 ... ok +test tests::test_max_contains_1_0 ... ok +test tests::test_max_contains_1_2 ... ok +test tests::test_max_contains_1_1 ... ok +test tests::test_max_contains_2_0 ... ok +test tests::test_max_contains_2_1 ... ok +test tests::test_max_contains_3_0 ... ok +test tests::test_max_contains_1_3 ... ok +test tests::test_max_contains_1_4 ... ok +test tests::test_max_contains_3_1 ... ok +test tests::test_max_contains_3_2 ... ok +test tests::test_max_contains_4_0 ... ok +test tests::test_max_items_0_0 ... ok +test tests::test_max_items_0_1 ... ok +test tests::test_max_items_0_2 ... ok +test tests::test_max_items_0_3 ... ok +test tests::test_max_items_2_0 ... ok +test tests::test_max_items_1_0 ... ok +test tests::test_max_length_0_1 ... ok +test tests::test_max_items_1_1 ... ok +test tests::test_max_length_0_3 ... ok +test tests::test_max_length_0_2 ... ok +test tests::test_max_length_0_0 ... ok +test tests::test_max_length_0_4 ... ok +test tests::test_max_length_1_0 ... ok +test tests::test_max_length_1_1 ... ok +test tests::test_max_properties_0_1 ... ok +test tests::test_max_properties_0_2 ... ok +test tests::test_max_properties_0_4 ... ok +test tests::test_max_properties_0_3 ... ok +test tests::test_max_properties_0_5 ... ok +test tests::test_max_properties_1_0 ... ok +test tests::test_max_properties_0_0 ... ok +test tests::test_max_properties_2_0 ... ok +test tests::test_max_properties_1_1 ... ok +test tests::test_max_properties_2_1 ... ok +test tests::test_max_properties_3_0 ... ok +test tests::test_max_properties_3_1 ... ok +test tests::test_maximum_0_1 ... ok +test tests::test_maximum_0_0 ... ok +test tests::test_maximum_0_3 ... ok +test tests::test_maximum_0_2 ... ok +test tests::test_maximum_1_0 ... ok +test tests::test_maximum_1_3 ... ok +test tests::test_maximum_1_1 ... ok +test tests::test_maximum_1_2 ... ok +test tests::test_merge_0_0 ... ok +test tests::test_merge_0_1 ... ok +test tests::test_merge_1_0 ... ok +test tests::test_merge_2_1 ... ok +test tests::test_merge_2_0 ... ok +test tests::test_merge_1_1 ... ok +test tests::test_merge_1_2 ... ok +test tests::test_merge_2_2 ... ok +test tests::test_merge_3_0 ... ok +test tests::test_min_contains_0_0 ... ok +test tests::test_min_contains_0_1 ... ok +test tests::test_min_contains_1_0 ... ok +test tests::test_min_contains_1_1 ... ok +test tests::test_min_contains_1_3 ... ok +test tests::test_min_contains_1_2 ... ok +test tests::test_min_contains_1_4 ... ok +test tests::test_min_contains_2_0 ... ok +test tests::test_min_contains_2_1 ... ok +test tests::test_min_contains_2_2 ... ok +test tests::test_min_contains_2_3 ... ok +test tests::test_min_contains_2_4 ... ok +test tests::test_min_contains_3_0 ... ok +test tests::test_min_contains_2_5 ... ok +test tests::test_min_contains_3_1 ... ok +test tests::test_min_contains_4_0 ... ok +test tests::test_min_contains_4_1 ... ok +test tests::test_min_contains_4_2 ... ok +test tests::test_min_contains_4_3 ... ok +test tests::test_min_contains_5_0 ... ok +test tests::test_min_contains_5_1 ... ok +test tests::test_min_contains_5_2 ... ok +test tests::test_min_contains_5_3 ... ok +test tests::test_min_contains_6_0 ... ok +test tests::test_min_contains_6_1 ... ok +test tests::test_min_contains_7_0 ... ok +test tests::test_min_contains_7_1 ... ok +test tests::test_min_contains_7_2 ... ok +test tests::test_min_contains_8_0 ... ok +test tests::test_min_items_0_0 ... ok +test tests::test_min_items_0_1 ... ok +test tests::test_min_items_0_2 ... ok +test tests::test_min_items_0_3 ... ok +test tests::test_min_items_1_0 ... ok +test tests::test_min_items_1_1 ... ok +test tests::test_merger_0_2 ... ok +test tests::test_merger_0_1 ... ok +test tests::test_min_items_2_0 ... ok +test tests::test_min_length_0_0 ... ok +test tests::test_min_length_0_1 ... ok +test tests::test_min_length_0_3 ... ok +test tests::test_min_length_0_2 ... ok +test tests::test_min_length_0_4 ... ok +test tests::test_min_length_1_0 ... ok +test tests::test_min_length_1_1 ... ok +test tests::test_min_properties_0_0 ... ok +test tests::test_min_properties_0_3 ... ok +test tests::test_min_properties_0_1 ... ok +test tests::test_min_properties_0_2 ... ok +test tests::test_min_properties_0_4 ... ok +test tests::test_min_properties_0_5 ... ok +test tests::test_min_properties_1_0 ... ok +test tests::test_min_properties_2_0 ... ok +test tests::test_min_properties_1_1 ... ok +test tests::test_minimum_0_0 ... ok +test tests::test_minimum_0_1 ... ok +test tests::test_minimum_0_2 ... ok +test tests::test_minimum_0_3 ... ok +test tests::test_minimum_1_0 ... ok +test tests::test_minimum_1_1 ... ok +test tests::test_minimum_1_2 ... ok +test tests::test_minimum_1_3 ... ok +test tests::test_minimum_1_4 ... ok +test tests::test_minimum_1_5 ... ok +test tests::test_minimum_1_6 ... ok +test tests::test_multiple_of_0_0 ... ok +test tests::test_multiple_of_0_1 ... ok +test tests::test_multiple_of_0_2 ... ok +test tests::test_multiple_of_1_0 ... ok +test tests::test_multiple_of_1_1 ... ok +test tests::test_multiple_of_1_2 ... ok +test tests::test_multiple_of_2_0 ... ok +test tests::test_multiple_of_2_1 ... ok +test tests::test_multiple_of_3_0 ... ok +test tests::test_not_0_0 ... ok +test tests::test_not_0_1 ... ok +test tests::test_not_10_0 ... ok +test tests::test_not_11_0 ... ok +test tests::test_not_11_1 ... ok +test tests::test_not_1_0 ... ok +test tests::test_not_1_1 ... ok +test tests::test_not_1_2 ... ok +test tests::test_not_2_0 ... ok +test tests::test_not_2_1 ... ok +test tests::test_not_2_2 ... ok +test tests::test_not_3_0 ... ok +test tests::test_not_3_1 ... ok +test tests::test_not_4_0 ... ok +test tests::test_not_4_1 ... ok +test tests::test_not_4_2 ... ok +test tests::test_not_4_3 ... ok +test tests::test_not_4_4 ... ok +test tests::test_not_4_5 ... ok +test tests::test_not_4_6 ... ok +test tests::test_not_4_7 ... ok +test tests::test_not_4_8 ... ok +test tests::test_not_5_0 ... ok +test tests::test_not_5_1 ... ok +test tests::test_not_5_2 ... ok +test tests::test_not_5_3 ... ok +test tests::test_not_5_4 ... ok +test tests::test_not_5_5 ... ok +test tests::test_not_5_6 ... ok +test tests::test_not_5_7 ... ok +test tests::test_not_5_8 ... ok +test tests::test_not_6_0 ... ok +test tests::test_not_6_1 ... ok +test tests::test_not_6_2 ... ok +test tests::test_not_6_3 ... ok +test tests::test_not_6_4 ... ok +test tests::test_not_6_5 ... ok +test tests::test_not_6_6 ... ok +test tests::test_not_6_7 ... ok +test tests::test_not_6_8 ... ok +test tests::test_not_7_0 ... ok +test tests::test_not_8_0 ... ok +test tests::test_not_9_0 ... ok +test tests::test_one_of_0_0 ... ok +test tests::test_one_of_0_1 ... ok +test tests::test_one_of_0_2 ... ok +test tests::test_one_of_0_3 ... ok +test tests::test_one_of_10_0 ... ok +test tests::test_one_of_10_1 ... ok +test tests::test_one_of_10_2 ... ok +test tests::test_one_of_10_3 ... ok +test tests::test_one_of_11_0 ... ok +test tests::test_one_of_11_1 ... ok +test tests::test_one_of_12_0 ... ok +test tests::test_one_of_1_0 ... ok +test tests::test_one_of_1_1 ... ok +test tests::test_one_of_1_2 ... ok +test tests::test_one_of_2_0 ... ok +test tests::test_one_of_3_0 ... ok +test tests::test_one_of_4_0 ... ok +test tests::test_one_of_5_0 ... ok +test tests::test_one_of_6_0 ... ok +test tests::test_one_of_6_1 ... ok +test tests::test_one_of_6_2 ... ok +test tests::test_one_of_6_3 ... ok +test tests::test_one_of_7_0 ... ok +test tests::test_one_of_7_1 ... ok +test tests::test_one_of_8_0 ... ok +test tests::test_one_of_8_1 ... ok +test tests::test_one_of_8_2 ... ok +test tests::test_one_of_8_3 ... ok +test tests::test_one_of_9_0 ... ok +test tests::test_one_of_9_1 ... ok +test tests::test_one_of_9_2 ... ok +test tests::test_one_of_8_4 ... ok +test tests::test_merger_0_3 ... ok +test tests::test_one_of_9_3 ... ok +test tests::test_one_of_9_4 ... ok +test tests::test_pattern_0_0 ... ok +test tests::test_pattern_0_2 ... ok +test tests::test_pattern_0_3 ... ok +test tests::test_pattern_0_4 ... ok +test tests::test_pattern_0_1 ... ok +test tests::test_pattern_0_5 ... ok +test tests::test_pattern_0_6 ... ok +test tests::test_pattern_0_7 ... ok +test tests::test_pattern_1_0 ... ok +test tests::test_merger_0_7 ... ok +test tests::test_merger_0_0 ... ok +test tests::test_pattern_properties_0_2 ... ok +test tests::test_pattern_properties_0_0 ... ok +test tests::test_pattern_properties_0_4 ... ok +test tests::test_pattern_properties_0_5 ... ok +test tests::test_pattern_properties_0_6 ... ok +test tests::test_pattern_properties_0_1 ... ok +test tests::test_pattern_properties_0_3 ... ok +test tests::test_pattern_properties_0_7 ... ok +test tests::test_pattern_properties_1_3 ... ok +test tests::test_pattern_properties_1_1 ... ok +test tests::test_pattern_properties_1_2 ... ok +test tests::test_pattern_properties_1_0 ... ok +test tests::test_pattern_properties_1_4 ... ok +test tests::test_pattern_properties_1_5 ... ok +test tests::test_pattern_properties_2_0 ... ok +test tests::test_pattern_properties_2_1 ... ok +test tests::test_pattern_properties_2_2 ... ok +test tests::test_pattern_properties_2_3 ... ok +test tests::test_pattern_properties_3_0 ... ok +test tests::test_pattern_properties_3_1 ... ok +test tests::test_pattern_properties_3_3 ... ok +test tests::test_pattern_properties_3_4 ... ok +test tests::test_pattern_properties_3_2 ... ok +test tests::test_pattern_properties_5_0 ... ok +test tests::test_pattern_properties_5_1 ... ok +test tests::test_pattern_properties_4_0 ... ok +test tests::test_prefix_items_0_2 ... ok +test tests::test_prefix_items_0_0 ... ok +test tests::test_prefix_items_0_1 ... ok +test tests::test_prefix_items_0_4 ... ok +test tests::test_prefix_items_0_5 ... ok +test tests::test_prefix_items_0_3 ... ok +test tests::test_prefix_items_1_0 ... ok +test tests::test_prefix_items_1_1 ... ok +test tests::test_prefix_items_1_2 ... ok +test tests::test_prefix_items_2_0 ... ok +test tests::test_prefix_items_3_0 ... ok +test tests::test_prefix_items_4_0 ... ok +test tests::test_properties_0_0 ... ok +test tests::test_properties_0_1 ... ok +test tests::test_properties_0_3 ... ok +test tests::test_properties_0_2 ... ok +test tests::test_properties_0_4 ... ok +test tests::test_properties_0_5 ... ok +test tests::test_properties_10_0 ... ok +test tests::test_properties_11_0 ... ok +test tests::test_properties_12_0 ... ok +test tests::test_properties_1_0 ... ok +test tests::test_properties_1_1 ... ok +test tests::test_properties_1_2 ... ok +test tests::test_properties_2_0 ... ok +test tests::test_properties_2_1 ... ok +test tests::test_properties_1_3 ... ok +test tests::test_properties_3_0 ... ok +test tests::test_properties_4_1 ... ok +test tests::test_properties_4_0 ... ok +test tests::test_properties_4_2 ... ok +test tests::test_properties_4_3 ... ok +test tests::test_properties_4_4 ... ok +test tests::test_properties_4_5 ... ok +test tests::test_properties_4_6 ... ok +test tests::test_properties_5_0 ... ok +test tests::test_properties_6_0 ... ok +test tests::test_properties_7_0 ... ok +test tests::test_properties_8_0 ... ok +test tests::test_properties_9_0 ... ok +test tests::test_property_names_0_2 ... ok +test tests::test_property_names_0_1 ... ok +test tests::test_property_names_0_3 ... ok +test tests::test_property_names_0_0 ... ok +test tests::test_property_names_0_4 ... ok +test tests::test_property_names_0_5 ... ok +test tests::test_property_names_1_2 ... ok +test tests::test_property_names_1_1 ... ok +test tests::test_property_names_1_0 ... ok +test tests::test_property_names_2_0 ... ok +test tests::test_property_names_2_1 ... ok +test tests::test_property_names_3_0 ... ok +test tests::test_property_names_3_1 ... ok +test tests::test_property_names_4_0 ... ok +test tests::test_property_names_4_1 ... ok +test tests::test_property_names_4_2 ... ok +test tests::test_property_names_5_0 ... ok +test tests::test_property_names_5_1 ... ok +test tests::test_property_names_5_2 ... ok +test tests::test_property_names_5_3 ... ok +test tests::test_property_names_6_0 ... ok +test tests::test_property_names_6_1 ... ok +test tests::test_queryer_0_1 ... ok +test tests::test_queryer_0_0 ... ok +test tests::test_queryer_0_2 ... ok +test tests::test_merger_0_5 ... ok +test tests::test_ref_0_0 ... ok +test tests::test_ref_11_0 ... ok +test tests::test_ref_0_1 ... ok +test tests::test_ref_10_0 ... ok +test tests::test_ref_11_1 ... ok +test tests::test_ref_11_3 ... ok +test tests::test_ref_11_2 ... ok +test tests::test_ref_12_0 ... ok +test tests::test_ref_13_0 ... ok +test tests::test_ref_12_1 ... ok +test tests::test_ref_12_2 ... ok +test tests::test_ref_13_1 ... ok +test tests::test_ref_14_0 ... ok +test tests::test_ref_15_0 ... ok +test tests::test_ref_14_1 ... ok +test tests::test_ref_15_1 ... ok +test tests::test_ref_1_0 ... ok +test tests::test_ref_1_2 ... ok +test tests::test_ref_2_0 ... ok +test tests::test_ref_1_1 ... ok +test tests::test_ref_2_1 ... ok +test tests::test_ref_3_1 ... ok +test tests::test_ref_3_0 ... ok +test tests::test_ref_4_0 ... ok +test tests::test_ref_5_0 ... ok +test tests::test_ref_6_0 ... ok +test tests::test_ref_6_1 ... ok +test tests::test_ref_8_0 ... ok +test tests::test_ref_9_0 ... ok +test tests::test_ref_7_0 ... ok +test tests::test_ref_9_1 ... ok +test tests::test_ref_9_2 ... ok +test tests::test_merger_0_4 ... ok +test tests::test_queryer_0_5 ... ok +test tests::test_required_0_0 ... ok +test tests::test_required_0_1 ... ok +test tests::test_required_0_4 ... ok +test tests::test_required_0_5 ... ok +test tests::test_required_0_3 ... ok +test tests::test_required_0_2 ... ok +test tests::test_required_0_6 ... ok +test tests::test_required_1_0 ... ok +test tests::test_required_2_0 ... ok +test tests::test_queryer_0_6 ... ok +test tests::test_required_3_0 ... ok +test tests::test_required_3_1 ... ok +test tests::test_required_4_0 ... ok +test tests::test_required_4_1 ... ok +test tests::test_required_4_2 ... ok +test tests::test_required_4_3 ... ok +test tests::test_required_4_4 ... ok +test tests::test_required_4_5 ... ok +test tests::test_required_4_6 ... ok +test tests::test_required_5_0 ... ok +test tests::test_type_0_0 ... ok +test tests::test_type_0_1 ... ok +test tests::test_type_0_4 ... ok +test tests::test_type_0_2 ... ok +test tests::test_type_0_3 ... ok +test tests::test_type_0_5 ... ok +test tests::test_type_0_6 ... ok +test tests::test_type_0_7 ... ok +test tests::test_type_0_8 ... ok +test tests::test_type_10_0 ... ok +test tests::test_type_10_1 ... ok +test tests::test_type_10_2 ... ok +test tests::test_type_10_3 ... ok +test tests::test_type_10_4 ... ok +test tests::test_type_11_0 ... ok +test tests::test_type_1_0 ... ok +test tests::test_type_1_1 ... ok +test tests::test_type_1_2 ... ok +test tests::test_type_1_3 ... ok +test tests::test_type_1_4 ... ok +test tests::test_type_1_5 ... ok +test tests::test_type_1_6 ... ok +test tests::test_type_1_7 ... ok +test tests::test_type_1_8 ... ok +test tests::test_type_2_0 ... ok +test tests::test_type_2_1 ... ok +test tests::test_type_2_2 ... ok +test tests::test_type_2_3 ... ok +test tests::test_type_2_4 ... ok +test tests::test_type_2_5 ... ok +test tests::test_type_2_6 ... ok +test tests::test_type_2_7 ... ok +test tests::test_type_2_8 ... ok +test tests::test_type_3_0 ... ok +test tests::test_type_3_1 ... ok +test tests::test_type_3_2 ... ok +test tests::test_type_3_3 ... ok +test tests::test_type_3_4 ... ok +test tests::test_type_3_5 ... ok +test tests::test_type_3_6 ... ok +test tests::test_type_4_0 ... ok +test tests::test_type_4_1 ... ok +test tests::test_type_4_2 ... ok +test tests::test_type_4_3 ... ok +test tests::test_type_4_4 ... ok +test tests::test_type_4_5 ... ok +test tests::test_type_4_6 ... ok +test tests::test_type_5_0 ... ok +test tests::test_type_5_1 ... ok +test tests::test_type_5_2 ... ok +test tests::test_type_5_3 ... ok +test tests::test_type_5_4 ... ok +test tests::test_type_5_5 ... ok +test tests::test_type_5_6 ... ok +test tests::test_type_5_7 ... ok +test tests::test_type_5_8 ... ok +test tests::test_type_5_9 ... ok +test tests::test_type_6_0 ... ok +test tests::test_type_6_1 ... ok +test tests::test_type_6_2 ... ok +test tests::test_type_6_3 ... ok +test tests::test_type_6_4 ... ok +test tests::test_type_6_5 ... ok +test tests::test_type_6_6 ... ok +test tests::test_type_6_7 ... ok +test tests::test_type_6_8 ... ok +test tests::test_type_6_9 ... ok +test tests::test_type_7_0 ... ok +test tests::test_type_7_1 ... ok +test tests::test_type_7_2 ... ok +test tests::test_type_7_3 ... ok +test tests::test_type_7_4 ... ok +test tests::test_type_7_5 ... ok +test tests::test_type_7_6 ... ok +test tests::test_type_8_0 ... ok +test tests::test_type_8_1 ... ok +test tests::test_type_9_0 ... ok +test tests::test_type_9_1 ... ok +test tests::test_type_9_2 ... ok +test tests::test_type_9_3 ... ok +test tests::test_type_9_4 ... ok +test tests::test_unique_items_0_0 ... ok +test tests::test_unique_items_0_1 ... ok +test tests::test_unique_items_0_10 ... ok +test tests::test_unique_items_0_13 ... ok +test tests::test_unique_items_0_11 ... ok +test tests::test_unique_items_0_12 ... ok +test tests::test_unique_items_0_14 ... ok +test tests::test_unique_items_0_15 ... ok +test tests::test_unique_items_0_16 ... ok +test tests::test_unique_items_0_17 ... ok +test tests::test_unique_items_0_18 ... ok +test tests::test_unique_items_0_19 ... ok +test tests::test_unique_items_0_2 ... ok +test tests::test_unique_items_0_20 ... ok +test tests::test_unique_items_0_21 ... ok +test tests::test_unique_items_0_22 ... ok +test tests::test_unique_items_0_23 ... ok +test tests::test_unique_items_0_24 ... ok +test tests::test_unique_items_0_25 ... ok +test tests::test_unique_items_0_26 ... ok +test tests::test_unique_items_0_27 ... ok +test tests::test_unique_items_0_3 ... ok +test tests::test_unique_items_0_4 ... ok +test tests::test_unique_items_0_5 ... ok +test tests::test_unique_items_0_6 ... ok +test tests::test_unique_items_0_7 ... ok +test tests::test_unique_items_0_8 ... ok +test tests::test_unique_items_0_9 ... ok +test tests::test_unique_items_1_0 ... ok +test tests::test_unique_items_1_1 ... ok +test tests::test_unique_items_1_2 ... ok +test tests::test_unique_items_1_4 ... ok +test tests::test_unique_items_1_3 ... ok +test tests::test_unique_items_1_5 ... ok +test tests::test_unique_items_1_6 ... ok +test tests::test_unique_items_1_7 ... ok +test tests::test_unique_items_2_0 ... ok +test tests::test_unique_items_2_1 ... ok +test tests::test_unique_items_2_2 ... ok +test tests::test_unique_items_2_3 ... ok +test tests::test_unique_items_2_4 ... ok +test tests::test_unique_items_3_0 ... ok +test tests::test_unique_items_3_1 ... ok +test tests::test_unique_items_3_10 ... ok +test tests::test_unique_items_3_11 ... ok +test tests::test_unique_items_3_12 ... ok +test tests::test_unique_items_3_13 ... ok +test tests::test_unique_items_3_14 ... ok +test tests::test_unique_items_3_2 ... ok +test tests::test_unique_items_3_3 ... ok +test tests::test_unique_items_3_4 ... ok +test tests::test_unique_items_3_5 ... ok +test tests::test_unique_items_3_6 ... ok +test tests::test_unique_items_3_7 ... ok +test tests::test_unique_items_3_8 ... ok +test tests::test_unique_items_3_9 ... ok +test tests::test_unique_items_4_0 ... ok +test tests::test_unique_items_4_1 ... ok +test tests::test_unique_items_4_2 ... ok +test tests::test_unique_items_4_3 ... ok +test tests::test_unique_items_4_4 ... ok +test tests::test_unique_items_4_5 ... ok +test tests::test_unique_items_4_6 ... ok +test tests::test_unique_items_4_7 ... ok +test tests::test_unique_items_5_0 ... ok +test tests::test_unique_items_5_1 ... ok +test tests::test_unique_items_5_2 ... ok +test tests::test_unique_items_5_3 ... ok +test tests::test_unique_items_5_4 ... ok +test tests::test_unique_items_6_0 ... ok +test tests::test_unique_items_6_1 ... ok +test tests::test_queryer_0_3 ... ok +test tests::test_queryer_0_4 ... ok +test tests::test_merger_0_6 ... ok + +test result: ok. 1424 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.23s + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + diff --git a/src/database/mod.rs b/src/database/mod.rs index 499da76..120c8c3 100644 --- a/src/database/mod.rs +++ b/src/database/mod.rs @@ -18,14 +18,11 @@ use executors::pgrx::SpiExecutor; #[cfg(test)] use executors::mock::MockExecutor; -pub mod stem; use punc::Punc; use relation::Relation; use schema::Schema; use serde_json::Value; use std::collections::{HashMap, HashSet}; -use std::sync::Arc; -use stem::Stem; use r#type::Type; pub struct Database { @@ -34,8 +31,6 @@ pub struct Database { pub puncs: HashMap, pub relations: Vec, pub schemas: HashMap, - // Map of Schema ID -> { Entity Type -> Target Subschema Arc } - pub stems: HashMap>>, pub descendants: HashMap>, pub depths: HashMap, pub executor: Box, @@ -49,7 +44,6 @@ impl Database { relations: Vec::new(), puncs: HashMap::new(), schemas: HashMap::new(), - stems: HashMap::new(), descendants: HashMap::new(), depths: HashMap::new(), #[cfg(not(test))] @@ -146,7 +140,6 @@ impl Database { self.collect_depths(); self.collect_descendants(); self.compile_schemas(); - self.collect_stems()?; Ok(()) } @@ -325,236 +318,4 @@ impl Database { } } } - - fn collect_stems(&mut self) -> Result<(), crate::drop::Drop> { - let mut db_stems: HashMap>> = HashMap::new(); - let mut errors: Vec = Vec::new(); - - let schema_ids: Vec = self.schemas.keys().cloned().collect(); - for schema_id in schema_ids { - if let Some(schema) = self.schemas.get(&schema_id) { - let mut inner_map = HashMap::new(); - Self::discover_stems( - self, - &schema_id, - schema, - String::from(""), - None, - None, - false, - &mut inner_map, - Vec::new(), - &mut errors, - ); - if !inner_map.is_empty() { - db_stems.insert(schema_id, inner_map); - } - } - } - - self.stems = db_stems; - - if !errors.is_empty() { - return Err(crate::drop::Drop::with_errors(errors)); - } - Ok(()) - } - - fn discover_stems( - db: &Database, - root_schema_id: &str, - schema: &Schema, - current_path: String, - parent_type: Option, - property_name: Option, - is_polymorphic: bool, - inner_map: &mut HashMap>, - seen_entities: Vec, - errors: &mut Vec, - ) { - let mut is_entity = false; - let mut entity_type = String::new(); - - // First check if the Schema's $id is a native Database Type - if let Some(ref id) = schema.obj.id { - let parts: Vec<&str> = id.split('.').collect(); - if let Some(last_seg) = parts.last() { - if db.types.contains_key(*last_seg) { - is_entity = true; - entity_type = last_seg.to_string(); - } - } - } - - // If not found via $id, check the $ref pointer - // This allows ad-hoc schemas (like `save_person.response`) to successfully adopt the Type of what they $ref - if !is_entity { - if let Some(ref r) = schema.obj.r#ref { - let parts: Vec<&str> = r.split('.').collect(); - if let Some(last_seg) = parts.last() { - if db.types.contains_key(*last_seg) { - is_entity = true; - entity_type = last_seg.to_string(); - } - } - } - } - - if is_entity { - if seen_entities.contains(&entity_type) { - return; // Break cyclical schemas! - } - } - - let mut relation_col = None; - if is_entity { - if let (Some(pt), Some(prop)) = (&parent_type, &property_name) { - let expected_col = format!("{}_id", prop); - let mut found = false; - - if let Some((rel, _)) = db.get_relation(pt, &entity_type, prop, None) { - if rel.source_columns.contains(&expected_col) { - relation_col = Some(expected_col.clone()); - found = true; - } - } - - if !found { - relation_col = Some(expected_col); - } - } - - let mut final_path = current_path.clone(); - if is_polymorphic && !final_path.is_empty() && !final_path.ends_with(&entity_type) { - if final_path.ends_with(".#") { - final_path = format!("{}(type==\"{}\")", final_path, entity_type); - } else { - final_path = format!("{}#(type==\"{}\")", final_path, entity_type); - } - } - - let stem = Stem { - r#type: entity_type.clone(), - relation: relation_col, - schema: Arc::new(schema.clone()), - }; - inner_map.insert(final_path, Arc::new(stem)); - } - - let next_parent = if is_entity { - Some(entity_type.clone()) - } else { - parent_type.clone() - }; - - let pass_seen = if is_entity { - let mut ns = seen_entities.clone(); - ns.push(entity_type.clone()); - ns - } else { - seen_entities.clone() - }; - - // Properties branch - if let Some(props) = &schema.obj.properties { - for (k, v) in props { - // Standard Property Pathing - let next_path = if current_path.is_empty() { - k.clone() - } else { - format!("{}.{}", current_path, k) - }; - - Self::discover_stems( - db, - root_schema_id, - v, - next_path, - next_parent.clone(), - Some(k.clone()), - false, - inner_map, - pass_seen.clone(), - errors, - ); - } - } - - // Array Item branch - if let Some(items) = &schema.obj.items { - let next_path = if current_path.is_empty() { - String::from("#") - } else { - format!("{}.#", current_path) - }; - - Self::discover_stems( - db, - root_schema_id, - items, - next_path, - next_parent.clone(), - property_name.clone(), - false, - inner_map, - pass_seen.clone(), - errors, - ); - } - - // Follow external reference if we didn't just crawl local properties - if schema.obj.properties.is_none() && schema.obj.items.is_none() && schema.obj.one_of.is_none() - { - if let Some(ref r) = schema.obj.r#ref { - if let Some(target_schema) = db.schemas.get(r) { - Self::discover_stems( - db, - root_schema_id, - target_schema, - current_path.clone(), - next_parent.clone(), - property_name.clone(), - is_polymorphic, - inner_map, - seen_entities.clone(), - errors, - ); - } - } - } - - // Polymorphism branch - if let Some(arr) = &schema.obj.one_of { - for v in arr { - Self::discover_stems( - db, - root_schema_id, - v.as_ref(), - current_path.clone(), - next_parent.clone(), - property_name.clone(), - true, - inner_map, - pass_seen.clone(), - errors, - ); - } - } - if let Some(arr) = &schema.obj.all_of { - for v in arr { - Self::discover_stems( - db, - root_schema_id, - v.as_ref(), - current_path.clone(), - next_parent.clone(), - property_name.clone(), - is_polymorphic, - inner_map, - pass_seen.clone(), - errors, - ); - } - } - } } diff --git a/src/database/stem.rs b/src/database/stem.rs deleted file mode 100644 index 26fe4c8..0000000 --- a/src/database/stem.rs +++ /dev/null @@ -1,12 +0,0 @@ -use crate::database::schema::Schema; -use serde::{Deserialize, Serialize}; -use std::sync::Arc; - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct Stem { - pub r#type: String, - #[serde(skip_serializing_if = "Option::is_none")] - pub relation: Option, - - pub schema: Arc, -} diff --git a/src/lib.rs b/src/lib.rs index cbd72d8..5958854 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -77,7 +77,7 @@ pub fn jspg_merge(data: JsonB) -> JsonB { } #[cfg_attr(not(test), pg_extern)] -pub fn jspg_query(schema_id: &str, stem: Option<&str>, filters: Option) -> JsonB { +pub fn jspg_query(schema_id: &str, filters: Option) -> JsonB { let engine_opt = { let lock = GLOBAL_JSPG.read().unwrap(); lock.clone() @@ -87,7 +87,7 @@ pub fn jspg_query(schema_id: &str, stem: Option<&str>, filters: Option) - Some(engine) => { let drop = engine .queryer - .query(schema_id, stem, filters.as_ref().map(|f| &f.0)); + .query(schema_id, filters.as_ref().map(|f| &f.0)); JsonB(serde_json::to_value(drop).unwrap()) } None => jspg_failure(), @@ -131,24 +131,6 @@ pub fn jspg_schemas() -> JsonB { } } -#[cfg_attr(not(test), pg_extern)] -pub fn jspg_stems() -> JsonB { - let engine_opt = { - let lock = GLOBAL_JSPG.read().unwrap(); - lock.clone() - }; - - match engine_opt { - Some(engine) => { - let stems_json = serde_json::to_value(&engine.database.stems) - .unwrap_or(serde_json::Value::Object(serde_json::Map::new())); - let drop = crate::drop::Drop::success_with_val(stems_json); - JsonB(serde_json::to_value(drop).unwrap()) - } - None => jspg_failure(), - } -} - #[cfg_attr(not(test), pg_extern(strict))] pub fn jspg_teardown() -> JsonB { let mut lock = GLOBAL_JSPG.write().unwrap(); diff --git a/src/queryer/compiler.rs b/src/queryer/compiler.rs index 13b3399..285c924 100644 --- a/src/queryer/compiler.rs +++ b/src/queryer/compiler.rs @@ -3,7 +3,6 @@ use std::sync::Arc; pub struct Compiler<'a> { pub db: &'a Database, pub filter_keys: &'a [String], - pub is_stem_query: bool, pub alias_counter: usize, } @@ -15,7 +14,7 @@ pub struct Node<'a> { pub parent_type: Option<&'a crate::database::r#type::Type>, pub property_name: Option, pub depth: usize, - pub stem_path: String, + pub ast_path: String, } impl<'a> Compiler<'a> { @@ -23,7 +22,6 @@ impl<'a> Compiler<'a> { pub fn compile( &self, schema_id: &str, - stem_path: Option<&str>, filter_keys: &[String], ) -> Result { let schema = self @@ -32,32 +30,11 @@ impl<'a> Compiler<'a> { .get(schema_id) .ok_or_else(|| format!("Schema not found: {}", schema_id))?; - let target_schema = if let Some(path) = stem_path.filter(|p| !p.is_empty() && *p != "/") { - if let Some(stems_map) = self.db.stems.get(schema_id) { - if let Some(stem) = stems_map.get(path) { - stem.schema.clone() - } else { - return Err(format!( - "Stem entity type '{}' not found in schema '{}'", - path, schema_id - )); - } - } else { - return Err(format!( - "Stem entity type '{}' not found in schema '{}'", - path, schema_id - )); - } - } else { - std::sync::Arc::new(schema.clone()) - }; - - let is_stem_query = stem_path.is_some(); + let target_schema = std::sync::Arc::new(schema.clone()); let mut compiler = Compiler { db: &self.db, filter_keys, - is_stem_query, alias_counter: 0, }; @@ -68,7 +45,7 @@ impl<'a> Compiler<'a> { parent_type: None, property_name: None, depth: 0, - stem_path: String::new(), + ast_path: String::new(), }; let (sql, _) = compiler.compile_node(node)?; @@ -89,24 +66,24 @@ impl<'a> Compiler<'a> { fn compile_array(&mut self, node: Node<'a>) -> Result<(String, String), String> { if let Some(items) = &node.schema.obj.items { - let next_path = if node.stem_path.is_empty() { + let next_path = if node.ast_path.is_empty() { String::from("#") } else { - format!("{}.#", node.stem_path) + format!("{}.#", node.ast_path) }; if let Some(ref_id) = &items.obj.r#ref { if let Some(type_def) = self.db.types.get(ref_id) { - let mut entity_noke = node.clone(); - entity_noke.stem_path = next_path; - entity_noke.schema = std::sync::Arc::clone(items); - return self.compile_entity(type_def, entity_noke, true); + let mut entity_node = node.clone(); + entity_node.ast_path = next_path; + entity_node.schema = std::sync::Arc::clone(items); + return self.compile_entity(type_def, entity_node, true); } } let mut next_node = node.clone(); next_node.depth += 1; - next_node.stem_path = next_path; + next_node.ast_path = next_path; next_node.schema = std::sync::Arc::clone(items); let (item_sql, _) = self.compile_node(next_node)?; return Ok(( @@ -328,16 +305,16 @@ impl<'a> Compiler<'a> { ) -> Result<(String, String), String> { let mut build_args = Vec::new(); for (k, v) in props { - let next_path = if node.stem_path.is_empty() { + let next_path = if node.ast_path.is_empty() { k.clone() } else { - format!("{}.{}", node.stem_path, k) + format!("{}.{}", node.ast_path, k) }; let mut child_node = node.clone(); child_node.property_name = Some(k.clone()); child_node.depth += 1; - child_node.stem_path = next_path; + child_node.ast_path = next_path; child_node.schema = std::sync::Arc::clone(v); let (child_sql, val_type) = self.compile_node(child_node)?; @@ -479,13 +456,13 @@ impl<'a> Compiler<'a> { child_node.parent_type = Some(r#type); child_node.property_name = Some(prop_key.clone()); child_node.depth += 1; - let next_path = if node.stem_path.is_empty() { + let next_path = if node.ast_path.is_empty() { prop_key.clone() } else { - format!("{}.{}", node.stem_path, prop_key) + format!("{}.{}", node.ast_path, prop_key) }; - child_node.stem_path = next_path; + child_node.ast_path = next_path; child_node.schema = std::sync::Arc::clone(prop_schema); let (val_sql, val_type) = self.compile_node(child_node)?; @@ -593,13 +570,13 @@ impl<'a> Compiler<'a> { let full_field_path = parts.next().unwrap_or(filter_key); let op = parts.next().unwrap_or("$eq"); - let field_name = if node.stem_path.is_empty() { + let field_name = if node.ast_path.is_empty() { if full_field_path.contains('.') || full_field_path.contains('#') { continue; } full_field_path } else { - let prefix = format!("{}.", node.stem_path); + let prefix = format!("{}.", node.ast_path); if full_field_path.starts_with(&prefix) { let remainder = &full_field_path[prefix.len()..]; if remainder.contains('.') || remainder.contains('#') { diff --git a/src/queryer/mod.rs b/src/queryer/mod.rs index 5e67de4..9a5b296 100644 --- a/src/queryer/mod.rs +++ b/src/queryer/mod.rs @@ -21,7 +21,6 @@ impl Queryer { pub fn query( &self, schema_id: &str, - stem_opt: Option<&str>, filters: Option<&serde_json::Value>, ) -> crate::drop::Drop { let filters_map = filters.and_then(|f| f.as_object()); @@ -43,11 +42,10 @@ impl Queryer { } }; - let stem_key = stem_opt.unwrap_or("/"); - let cache_key = format!("{}(Stem:{}):{}", schema_id, stem_key, filter_keys.join(",")); + let cache_key = format!("{}:{}", schema_id, filter_keys.join(",")); // 2. Fetch from cache or compile - let sql = match self.get_or_compile_sql(&cache_key, schema_id, stem_opt, &filter_keys) { + let sql = match self.get_or_compile_sql(&cache_key, schema_id, &filter_keys) { Ok(sql) => sql, Err(drop) => return drop, }; @@ -90,7 +88,6 @@ impl Queryer { &self, cache_key: &str, schema_id: &str, - stem_opt: Option<&str>, filter_keys: &[String], ) -> Result { if let Some(cached_sql) = self.cache.get(cache_key) { @@ -100,11 +97,10 @@ impl Queryer { let compiler = compiler::Compiler { db: &self.db, filter_keys: filter_keys, - is_stem_query: stem_opt.is_some(), alias_counter: 0, }; - match compiler.compile(schema_id, stem_opt, filter_keys) { + match compiler.compile(schema_id, filter_keys) { Ok(compiled_sql) => { self .cache diff --git a/src/tests/fixtures.rs b/src/tests/fixtures.rs index 6ea4ec8..e4b2dac 100644 --- a/src/tests/fixtures.rs +++ b/src/tests/fixtures.rs @@ -1451,30 +1451,6 @@ fn test_queryer_0_6() { crate::tests::runner::run_test_case(&path, 0, 6).unwrap(); } -#[test] -fn test_queryer_0_7() { - let path = format!("{}/fixtures/queryer.json", env!("CARGO_MANIFEST_DIR")); - crate::tests::runner::run_test_case(&path, 0, 7).unwrap(); -} - -#[test] -fn test_queryer_0_8() { - let path = format!("{}/fixtures/queryer.json", env!("CARGO_MANIFEST_DIR")); - crate::tests::runner::run_test_case(&path, 0, 8).unwrap(); -} - -#[test] -fn test_queryer_0_9() { - let path = format!("{}/fixtures/queryer.json", env!("CARGO_MANIFEST_DIR")); - crate::tests::runner::run_test_case(&path, 0, 9).unwrap(); -} - -#[test] -fn test_queryer_0_10() { - let path = format!("{}/fixtures/queryer.json", env!("CARGO_MANIFEST_DIR")); - crate::tests::runner::run_test_case(&path, 0, 10).unwrap(); -} - #[test] fn test_not_0_0() { let path = format!("{}/fixtures/not.json", env!("CARGO_MANIFEST_DIR")); @@ -3449,12 +3425,6 @@ fn test_if_then_else_13_1() { crate::tests::runner::run_test_case(&path, 13, 1).unwrap(); } -#[test] -fn test_stems_0_0() { - let path = format!("{}/fixtures/stems.json", env!("CARGO_MANIFEST_DIR")); - crate::tests::runner::run_test_case(&path, 0, 0).unwrap(); -} - #[test] fn test_empty_string_0_0() { let path = format!("{}/fixtures/emptyString.json", env!("CARGO_MANIFEST_DIR")); diff --git a/src/tests/types/case.rs b/src/tests/types/case.rs index 01dabd9..8e9bac2 100644 --- a/src/tests/types/case.rs +++ b/src/tests/types/case.rs @@ -16,9 +16,6 @@ pub struct Case { pub schema_id: String, // For Query - #[serde(default)] - pub stem: Option, - #[serde(default)] pub filters: Option, @@ -38,7 +35,7 @@ fn default_action() -> String { } impl Case { - pub fn run_compile(&self, db: Arc) -> Result<(), String> { + pub fn run_compile(&self, _db: Arc) -> Result<(), String> { let expected_success = self.expect.as_ref().map(|e| e.success).unwrap_or(false); // We assume db has already been setup and compiled successfully by runner.rs's `jspg_setup` @@ -52,24 +49,6 @@ impl Case { )); } - // Assert stems - if let Some(expect) = &self.expect { - if let Some(expected_stems) = &expect.stems { - // Convert the Db stems (HashMap>>) to matching JSON shape - let db_stems_json = serde_json::to_value(&db.stems).unwrap(); - let expect_stems_json = serde_json::to_value(expected_stems).unwrap(); - - if db_stems_json != expect_stems_json { - let expected_pretty = serde_json::to_string_pretty(&expect_stems_json).unwrap(); - let got_pretty = serde_json::to_string_pretty(&db_stems_json).unwrap(); - return Err(format!( - "Stem validation failed.\nExpected:\n{}\n\nGot:\n{}", - expected_pretty, got_pretty - )); - } - } - } - Ok(()) } @@ -158,8 +137,7 @@ impl Case { use crate::queryer::Queryer; let queryer = Queryer::new(db.clone()); - let stem_opt = self.stem.as_deref(); - let result = queryer.query(&self.schema_id, stem_opt, self.filters.as_ref()); + let result = queryer.query(&self.schema_id, self.filters.as_ref()); let expected_success = self.expect.as_ref().map(|e| e.success).unwrap_or(false); let got_success = result.errors.is_empty(); diff --git a/src/tests/types/expect/mod.rs b/src/tests/types/expect/mod.rs index 8dee154..0ce9647 100644 --- a/src/tests/types/expect/mod.rs +++ b/src/tests/types/expect/mod.rs @@ -2,7 +2,6 @@ pub mod pattern; pub mod sql; use serde::Deserialize; -use std::collections::HashMap; #[derive(Debug, Deserialize)] #[serde(untagged)] @@ -16,7 +15,6 @@ pub struct Expect { pub success: bool, pub result: Option, pub errors: Option>, - pub stems: Option>>, #[serde(default)] pub sql: Option>, }