Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bad performance of /camp endpoint #2569

Closed
usu opened this issue Apr 4, 2022 · 12 comments
Closed

Bad performance of /camp endpoint #2569

usu opened this issue Apr 4, 2022 · 12 comments
Assignees

Comments

@usu
Copy link
Member

usu commented Apr 4, 2022

Code branches

See linked pull requests for timing measurements.

  • Baseline
    Implemented:
    • Add some missing indexes + add performance measurement via frontend
  • Option 1
    Implemented:
    • rootContentNode is always a ColumnLayout
    • Workaround for ContentNode->owner
    • no eager loading for /camps endpoint

Notes on identified performance problems

Doctrine lazy loading issues

  • AbstractContentNodeOwner->rootContentNode (Problem: *ToOne to abstract entity)

    • Implemented in option1: Fixed to ColumnLayout
    • Alternative: Introduce special RootContentNode
    • Alternative: Many rootContentNodes (OneToMany)
  • ContentNode ->owner (Problem: OneToOne inversed not lazy loadable)

    • Implemented in option1: Workaround ManyToOne misused for OneToOne
    • Alternative: Remove owner completely and store relation to camp (relation to camp is needed for security check on /content_nodes endpoint)
    • Alternative: Remove owner completely. Use another interface (e.g. BelongsToContentNode interface) for security voting.

Eager loading issues

  • Queries generated by eager loading can get really huge for entities with many OneToMany relations (i.e. query with 2800+ rows for a single camp)
  • Eager loading cannot be disabled globally (method documented in https://api-platform.com/docs/core/performance/#force-eager didn't work)
  • EagerLoadingExtension stops recursion if $propertyMetadata->isReadableLink() is not true. However, in many cases we set readableLink not on the property itself but on a getter (e.g. Camp->getEmbeddedPeriods()). In this case, data is not eager loaded although the data will be embedded later in the response.

Normalization

  • RelatedCollectionLinkNormalizer fully normalizes the object before replacing the links. In many cases we load many child entities which are not needed, because we replace them later with a single link (especially for collections, where the child entities are normally not embedded).

ContentNode endpoint

The ContentNode endpoint is sill the slowest, as individual content is loaded via separate queries after the ContentNode collection is loaded. Mainly:

  • MaterialNode->getMaterialItems()
  • Storyboard->getSections()
  • MultiSelect->getOptions()

Potential solutions:

  • Manually eager load all possible data (not sure how; maybe in repository?)
  • Teach EagerLoadingExtension to understand subclasses
  • Refactor ContentNode (see separate proposal in Proposal for ContentNode refactor #2633)

Initial issue description

Loading a single camp from the API takes much longer than it should (one of the slowest endpoints). There are a lot of SQL request triggered in the backend. Not entirely sure why. Assuming it's connected to eager loading and somehow doctrine tries to manually load the rootContentNode of each category and each activity of the camp (even when no such data is embedded).

Couldn't really figure out how to avoid.

Doctrine debug log

[2022-04-04T18:38:05.446213+00:00] doctrine.DEBUG: SELECT t0.state AS state_1, t0.activationKeyHash AS activationkeyhash_2, t0.password AS password_3, t0.id AS id_4, t0.createTime AS createtime_5, t0.updateTime AS updatetime_6, t0.profileId AS profileid_7 FROM "user" t0 WHERE t0.id = ? ["9145944210a7"] []

[2022-04-04T18:38:05.460664+00:00] doctrine.DEBUG: SELECT t0.email AS email_1, t0.googleId AS googleid_2, t0.pbsmidataId AS pbsmidataid_3, t0.cevidbId AS cevidbid_4, t0.username AS username_5, t0.firstname AS firstname_6, t0.surname AS surname_7, t0.nickname AS nickname_8, t0.language AS language_9, t0.roles AS roles_10, t0.id AS id_11, t0.createTime AS createtime_12, t0.updateTime AS updatetime_13, t14.state AS state_15, t14.activationKeyHash AS activationkeyhash_16, t14.password AS password_17, t14.id AS id_18, t14.createTime AS createtime_19, t14.updateTime AS updatetime_20, t14.profileId AS profileid_21 FROM "profile" t0 LEFT JOIN "user" t14 ON t14.profileId = t0.id WHERE t0.id = ? ["5e387cad273d"] []

[2022-04-04T18:38:05.463812+00:00] security.DEBUG: User was reloaded from a user provider. {"provider":"Symfony\\Bridge\\Doctrine\\Security\\User\\EntityUserProvider","username":"test-user"} []

[2022-04-04T18:38:05.470139+00:00] doctrine.DEBUG: SELECT u0_.state AS state_0, u0_.activationKeyHash AS activationkeyhash_1, u0_.password AS password_2, u0_.id AS id_3, u0_.createTime AS createtime_4, u0_.updateTime AS updatetime_5, u0_.profileId AS profileid_6 FROM "user" u0_ INNER JOIN "profile" p1_ ON u0_.profileId = p1_.id WHERE p1_.username = ? OR p1_.email = ? ["test-user","test-user"] []

[2022-04-04T18:38:05.473612+00:00] security.INFO: Authenticator successful! {"token":{"Lexik\\Bundle\\JWTAuthenticationBundle\\Security\\Authenticator\\Token\\JWTPostAuthenticationToken":"JWTPostAuthenticationToken(user=\"test-user\", roles=\"ROLE_USER\")"},"authenticator":"Lexik\\Bundle\\JWTAuthenticationBundle\\Security\\Authenticator\\JWTAuthenticator"} []

[2022-04-04T18:38:05.475115+00:00] security.DEBUG: Authenticator set no success response: request continues. {"authenticator":"Lexik\\Bundle\\JWTAuthenticationBundle\\Security\\Authenticator\\JWTAuthenticator"} []

[2022-04-04T18:38:05.517308+00:00] doctrine.DEBUG: SELECT c0_.campPrototypeId AS campprototypeid_0, c0_.isPrototype AS isprototype_1, c0_.name AS name_2, c0_.title AS title_3, c0_.motto AS motto_4, c0_.addressName AS addressname_5, c0_.addressStreet AS addressstreet_6, c0_.addressZipcode AS addresszipcode_7, c0_.addressCity AS addresscity_8, c0_.id AS id_9, c0_.createTime AS createtime_10, c0_.updateTime AS updatetime_11, c1_.inviteEmail AS inviteemail_12, c1_.inviteKeyHash AS invitekeyhash_13, c1_.status AS status_14, c1_.role AS role_15, c1_.collaborationAcceptedBy AS collaborationacceptedby_16, c1_.id AS id_17, c1_.createTime AS createtime_18, c1_.updateTime AS updatetime_19, p2_.description AS description_20, p2_.start AS start_21, p2_."end" AS end_22, p2_.id AS id_23, p2_.createTime AS createtime_24, p2_.updateTime AS updatetime_25, a3_.id AS id_26, a3_.createTime AS createtime_27, a3_.updateTime AS updatetime_28, c4_.categoryPrototypeId AS categoryprototypeid_29, c4_.short AS short_30, c4_.name AS name_31, c4_.color AS color_32, c4_.numberingStyle AS numberingstyle_33, a5_.id AS id_34, a5_.createTime AS createtime_35, a5_.updateTime AS updatetime_36, a6_.title AS title_37, a6_.location AS location_38, m7_.materialListPrototypeId AS materiallistprototypeid_39, m7_.name AS name_40, m7_.id AS id_41, m7_.createTime AS createtime_42, m7_.updateTime AS updatetime_43, u8_.state AS state_44, u8_.activationKeyHash AS activationkeyhash_45, u8_.password AS password_46, u8_.id AS id_47, u8_.createTime AS createtime_48, u8_.updateTime AS updatetime_49, c0_.creatorId AS creatorid_50, c0_.ownerId AS ownerid_51, c1_.userId AS userid_52, c1_.campId AS campid_53, p2_.campId AS campid_54, a3_.entityType AS entitytype_55, a3_.rootContentNodeId AS rootcontentnodeid_56, c4_.campId AS campid_57, a5_.entityType AS entitytype_58, a5_.rootContentNodeId AS rootcontentnodeid_59, a6_.campId AS campid_60, a6_.categoryId AS categoryid_61, m7_.campId AS campid_62, u8_.profileId AS profileid_63 FROM camp c0_ LEFT JOIN camp_collaboration c1_ ON c0_.id = c1_.campId LEFT JOIN period p2_ ON c0_.id = p2_.campId LEFT JOIN category c4_ ON c0_.id = c4_.campId LEFT JOIN abstract_content_node_owner a3_ ON c4_.id = a3_.id LEFT JOIN activity a6_ ON c0_.id = a6_.campId LEFT JOIN abstract_content_node_owner a5_ ON a6_.id = a5_.id LEFT JOIN material_list m7_ ON c0_.id = m7_.campId INNER JOIN "user" u8_ ON c0_.creatorId = u8_.id LEFT JOIN camp_collaboration c9_ ON c0_.id = c9_.campId WHERE c0_.id = ? AND ((c9_.userId = ? AND c9_.status = ?) OR c0_.isPrototype = ?) ORDER BY p2_.start ASC ["05ce4b9836e9","9145944210a7","established",true] []

[2022-04-04T18:38:05.674715+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["869c7bbcf042"] []

[2022-04-04T18:38:05.680247+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["869c7bbcf042"] []

[2022-04-04T18:38:05.683436+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["cb499c5495f0"] []

[2022-04-04T18:38:05.685181+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["cb499c5495f0"] []

[2022-04-04T18:38:05.692063+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["9718e0c98748"] []

[2022-04-04T18:38:05.693982+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["9718e0c98748"] []

[2022-04-04T18:38:05.698114+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["a71f929dd156"] []

[2022-04-04T18:38:05.699243+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["a71f929dd156"] []

[2022-04-04T18:38:05.703929+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["a2505e2c8aca"] []

[2022-04-04T18:38:05.705743+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["a2505e2c8aca"] []

[2022-04-04T18:38:05.709465+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["d62d16c6afb6"] []

[2022-04-04T18:38:05.710723+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["d62d16c6afb6"] []

[2022-04-04T18:38:05.715036+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["8d7faccc13ce"] []

[2022-04-04T18:38:05.716379+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["8d7faccc13ce"] []

[2022-04-04T18:38:05.724050+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["c7a28bcfd35f"] []

[2022-04-04T18:38:05.725838+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["c7a28bcfd35f"] []

[2022-04-04T18:38:05.738659+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["83b61af97910"] []

[2022-04-04T18:38:05.740635+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["83b61af97910"] []

[2022-04-04T18:38:05.746139+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["02823e618716"] []

[2022-04-04T18:38:05.747941+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["02823e618716"] []

[2022-04-04T18:38:05.752521+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["cd89a68084ff"] []

[2022-04-04T18:38:05.754781+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["cd89a68084ff"] []

[2022-04-04T18:38:05.759043+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["c8e4a0be93af"] []

[2022-04-04T18:38:05.760678+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["c8e4a0be93af"] []

[2022-04-04T18:38:05.765358+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["645000130f8c"] []

[2022-04-04T18:38:05.766903+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["645000130f8c"] []

[2022-04-04T18:38:05.771938+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["af6d3bd31bfb"] []

[2022-04-04T18:38:05.773820+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["af6d3bd31bfb"] []

[2022-04-04T18:38:05.777871+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["d3b0c2d25c72"] []

[2022-04-04T18:38:05.779636+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["d3b0c2d25c72"] []

[2022-04-04T18:38:05.783926+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["69a1c2680b2b"] []

[2022-04-04T18:38:05.786032+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["69a1c2680b2b"] []

[2022-04-04T18:38:05.791640+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["25aa0c832b70"] []

[2022-04-04T18:38:05.793451+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["25aa0c832b70"] []

[2022-04-04T18:38:05.803898+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["303e8d9d2e2e"] []

[2022-04-04T18:38:05.805743+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["303e8d9d2e2e"] []

[2022-04-04T18:38:05.811304+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["160930523ce2"] []

[2022-04-04T18:38:05.813100+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["160930523ce2"] []

[2022-04-04T18:38:05.820753+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["678166f5bd6c"] []

[2022-04-04T18:38:05.824886+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["678166f5bd6c"] []

[2022-04-04T18:38:05.829809+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["3d211da36cc6"] []

[2022-04-04T18:38:05.831367+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["3d211da36cc6"] []

[2022-04-04T18:38:05.836684+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["656295313d5c"] []

[2022-04-04T18:38:05.838169+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["656295313d5c"] []

[2022-04-04T18:38:05.842136+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["5bdd84d2ab79"] []

[2022-04-04T18:38:05.843915+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["5bdd84d2ab79"] []

[2022-04-04T18:38:05.848747+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["a29cff2d1d03"] []

[2022-04-04T18:38:05.850217+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["a29cff2d1d03"] []

[2022-04-04T18:38:05.855447+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["3edf02e5fd3d"] []

[2022-04-04T18:38:05.857141+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["3edf02e5fd3d"] []

[2022-04-04T18:38:05.861357+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["6127f9640b45"] []

[2022-04-04T18:38:05.863110+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["6127f9640b45"] []

[2022-04-04T18:38:05.868329+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["e2ba5d9578b7"] []

[2022-04-04T18:38:05.875721+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["e2ba5d9578b7"] []

[2022-04-04T18:38:05.881304+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["ca9582689c1e"] []

[2022-04-04T18:38:05.883224+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["ca9582689c1e"] []

[2022-04-04T18:38:05.890540+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["50172d027864"] []

[2022-04-04T18:38:05.893230+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["50172d027864"] []

[2022-04-04T18:38:05.901108+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["ff2ed0cab03e"] []

[2022-04-04T18:38:05.902985+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["ff2ed0cab03e"] []

[2022-04-04T18:38:05.907954+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["c6eb39db9f9c"] []

[2022-04-04T18:38:05.909453+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["c6eb39db9f9c"] []

[2022-04-04T18:38:05.914258+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["32e70cad4ec9"] []

[2022-04-04T18:38:05.915663+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["32e70cad4ec9"] []

[2022-04-04T18:38:06.326749+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["75a94bbedf29"] []

[2022-04-04T18:38:06.328795+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["75a94bbedf29"] []

[2022-04-04T18:38:06.799715+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["0c43453c67aa"] []

[2022-04-04T18:38:06.801376+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["0c43453c67aa"] []

[2022-04-04T18:38:06.813085+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["c686b7b2bf2e"] []

[2022-04-04T18:38:06.815111+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["c686b7b2bf2e"] []

[2022-04-04T18:38:06.833672+00:00] doctrine.DEBUG: SELECT t0.slot AS slot_6, t0.position AS position_7, t0.instanceName AS instancename_8, t0.id AS id_9, t0.createTime AS createtime_10, t0.updateTime AS updatetime_11, t0.rootId AS rootid_12, t0.parentId AS parentid_13, t0.contentTypeId AS contenttypeid_14, t0.strategy, t3.columns AS columns_15, t5.text AS text_16 FROM content_node t0 LEFT JOIN content_node_storyboard t1 ON t0.id = t1.id LEFT JOIN content_node_multiselect t2 ON t0.id = t2.id LEFT JOIN content_node_columnlayout t3 ON t0.id = t3.id LEFT JOIN content_node_materialnode t4 ON t0.id = t4.id LEFT JOIN content_node_singletext t5 ON t0.id = t5.id WHERE t0.id = ? ["3653b3134fc5"] []

[2022-04-04T18:38:06.835370+00:00] doctrine.DEBUG: SELECT t0.id AS id_3, t0.createTime AS createtime_4, t0.updateTime AS updatetime_5, t0.rootContentNodeId AS rootcontentnodeid_6, t0.entityType, t1.categoryPrototypeId AS categoryprototypeid_7, t1.short AS short_8, t1.name AS name_9, t1.color AS color_10, t1.numberingStyle AS numberingstyle_11, t1.campId AS campid_12, t2.title AS title_13, t2.location AS location_14, t2.campId AS campid_15, t2.categoryId AS categoryid_16 FROM abstract_content_node_owner t0 LEFT JOIN category t1 ON t0.id = t1.id LEFT JOIN activity t2 ON t0.id = t2.id WHERE t0.rootContentNodeId = ? ["3653b3134fc5"] []

[2022-04-04T18:38:08.285017+00:00] doctrine.DEBUG: SELECT t0.dayOffset AS dayoffset_1, t0.id AS id_2, t0.createTime AS createtime_3, t0.updateTime AS updatetime_4, t0.periodId AS periodid_5 FROM day t0 WHERE t0.periodId = ? ORDER BY t0.dayOffset ASC ["e8c03e4285cb"] []

[2022-04-04T18:38:08.289441+00:00] doctrine.DEBUG: SELECT t0.startOffset AS startoffset_1, t0.endOffset AS endoffset_2, t0."left" AS left_3, t0.width AS width_4, t0.id AS id_5, t0.createTime AS createtime_6, t0.updateTime AS updatetime_7, t0.periodId AS periodid_8, t0.activityId AS activityid_9 FROM schedule_entry t0 WHERE t0.periodId = ? ORDER BY t0.startOffset ASC, t0."left" ASC, t0.endOffset DESC, t0.id ASC ["e8c03e4285cb"] []

[2022-04-04T18:38:08.299013+00:00] doctrine.DEBUG: SELECT t0.article AS article_1, t0.quantity AS quantity_2, t0.unit AS unit_3, t0.id AS id_4, t0.createTime AS createtime_5, t0.updateTime AS updatetime_6, t0.materialListId AS materiallistid_7, t0.periodId AS periodid_8, t0.materialNodeId AS materialnodeid_9 FROM material_item t0 WHERE t0.periodId = ? ["e8c03e4285cb"] []

[2022-04-04T18:38:08.304098+00:00] doctrine.DEBUG: SELECT t0.id AS id_1, t0.createTime AS createtime_2, t0.updateTime AS updatetime_3, t0.dayId AS dayid_4, t0.campCollaborationId AS campcollaborationid_5 FROM day_responsible t0 WHERE t0.dayId = ? ["ad21560b27b3"] []

[2022-04-04T18:38:08.309696+00:00] doctrine.DEBUG: SELECT t0.id AS id_1, t0.createTime AS createtime_2, t0.updateTime AS updatetime_3, t0.dayId AS dayid_4, t0.campCollaborationId AS campcollaborationid_5 FROM day_responsible t0 WHERE t0.dayId = ? ["65d73042d34e"] []

[2022-04-04T18:38:08.312974+00:00] doctrine.DEBUG: SELECT t0.id AS id_1, t0.createTime AS createtime_2, t0.updateTime AS updatetime_3, t0.dayId AS dayid_4, t0.campCollaborationId AS campcollaborationid_5 FROM day_responsible t0 WHERE t0.dayId = ? ["f036e9302f65"] []

[2022-04-04T18:38:08.315684+00:00] doctrine.DEBUG: SELECT t0.id AS id_1, t0.createTime AS createtime_2, t0.updateTime AS updatetime_3, t0.dayId AS dayid_4, t0.campCollaborationId AS campcollaborationid_5 FROM day_responsible t0 WHERE t0.dayId = ? ["f036e9302f66"] []

[2022-04-04T18:38:08.331740+00:00] doctrine.DEBUG: SELECT t0.email AS email_1, t0.googleId AS googleid_2, t0.pbsmidataId AS pbsmidataid_3, t0.cevidbId AS cevidbid_4, t0.username AS username_5, t0.firstname AS firstname_6, t0.surname AS surname_7, t0.nickname AS nickname_8, t0.language AS language_9, t0.roles AS roles_10, t0.id AS id_11, t0.createTime AS createtime_12, t0.updateTime AS updatetime_13, t14.state AS state_15, t14.activationKeyHash AS activationkeyhash_16, t14.password AS password_17, t14.id AS id_18, t14.createTime AS createtime_19, t14.updateTime AS updatetime_20, t14.profileId AS profileid_21 FROM "profile" t0 LEFT JOIN "user" t14 ON t14.profileId = t0.id WHERE t0.id = ? ["f9f1a2f9af25"] []

[2022-04-04T18:38:08.335033+00:00] doctrine.DEBUG: SELECT t0.state AS state_1, t0.activationKeyHash AS activationkeyhash_2, t0.password AS password_3, t0.id AS id_4, t0.createTime AS createtime_5, t0.updateTime AS updatetime_6, t0.profileId AS profileid_7 FROM "user" t0 WHERE t0.id = ? ["48f00685a292"] []

[2022-04-04T18:38:08.336144+00:00] doctrine.DEBUG: SELECT t0.email AS email_1, t0.googleId AS googleid_2, t0.pbsmidataId AS pbsmidataid_3, t0.cevidbId AS cevidbid_4, t0.username AS username_5, t0.firstname AS firstname_6, t0.surname AS surname_7, t0.nickname AS nickname_8, t0.language AS language_9, t0.roles AS roles_10, t0.id AS id_11, t0.createTime AS createtime_12, t0.updateTime AS updatetime_13, t14.state AS state_15, t14.activationKeyHash AS activationkeyhash_16, t14.password AS password_17, t14.id AS id_18, t14.createTime AS createtime_19, t14.updateTime AS updatetime_20, t14.profileId AS profileid_21 FROM "profile" t0 LEFT JOIN "user" t14 ON t14.profileId = t0.id WHERE t0.id = ? ["0870635edda6"] []

[2022-04-04T18:38:08.346058+00:00] doctrine.DEBUG: SELECT t0.state AS state_1, t0.activationKeyHash AS activationkeyhash_2, t0.password AS password_3, t0.id AS id_4, t0.createTime AS createtime_5, t0.updateTime AS updatetime_6, t0.profileId AS profileid_7 FROM "user" t0 WHERE t0.id = ? ["130684395770"] []

[2022-04-04T18:38:08.347604+00:00] doctrine.DEBUG: SELECT t0.email AS email_1, t0.googleId AS googleid_2, t0.pbsmidataId AS pbsmidataid_3, t0.cevidbId AS cevidbid_4, t0.username AS username_5, t0.firstname AS firstname_6, t0.surname AS surname_7, t0.nickname AS nickname_8, t0.language AS language_9, t0.roles AS roles_10, t0.id AS id_11, t0.createTime AS createtime_12, t0.updateTime AS updatetime_13, t14.state AS state_15, t14.activationKeyHash AS activationkeyhash_16, t14.password AS password_17, t14.id AS id_18, t14.createTime AS createtime_19, t14.updateTime AS updatetime_20, t14.profileId AS profileid_21 FROM "profile" t0 LEFT JOIN "user" t14 ON t14.profileId = t0.id WHERE t0.id = ? ["22dce794d4e2"] []

[2022-04-04T18:38:08.350612+00:00] doctrine.DEBUG: SELECT t0.state AS state_1, t0.activationKeyHash AS activationkeyhash_2, t0.password AS password_3, t0.id AS id_4, t0.createTime AS createtime_5, t0.updateTime AS updatetime_6, t0.profileId AS profileid_7 FROM "user" t0 WHERE t0.id = ? ["bee7cf5b3871"] []

[2022-04-04T18:38:08.351796+00:00] doctrine.DEBUG: SELECT t0.email AS email_1, t0.googleId AS googleid_2, t0.pbsmidataId AS pbsmidataid_3, t0.cevidbId AS cevidbid_4, t0.username AS username_5, t0.firstname AS firstname_6, t0.surname AS surname_7, t0.nickname AS nickname_8, t0.language AS language_9, t0.roles AS roles_10, t0.id AS id_11, t0.createTime AS createtime_12, t0.updateTime AS updatetime_13, t14.state AS state_15, t14.activationKeyHash AS activationkeyhash_16, t14.password AS password_17, t14.id AS id_18, t14.createTime AS createtime_19, t14.updateTime AS updatetime_20, t14.profileId AS profileid_21 FROM "profile" t0 LEFT JOIN "user" t14 ON t14.profileId = t0.id WHERE t0.id = ? ["d46337a76a2c"] []

[2022-04-04T18:38:08.355298+00:00] doctrine.DEBUG: SELECT t0.state AS state_1, t0.activationKeyHash AS activationkeyhash_2, t0.password AS password_3, t0.id AS id_4, t0.createTime AS createtime_5, t0.updateTime AS updatetime_6, t0.profileId AS profileid_7 FROM "user" t0 WHERE t0.id = ? ["caeba9f7e728"] []

[2022-04-04T18:38:08.356696+00:00] doctrine.DEBUG: SELECT t0.email AS email_1, t0.googleId AS googleid_2, t0.pbsmidataId AS pbsmidataid_3, t0.cevidbId AS cevidbid_4, t0.username AS username_5, t0.firstname AS firstname_6, t0.surname AS surname_7, t0.nickname AS nickname_8, t0.language AS language_9, t0.roles AS roles_10, t0.id AS id_11, t0.createTime AS createtime_12, t0.updateTime AS updatetime_13, t14.state AS state_15, t14.activationKeyHash AS activationkeyhash_16, t14.password AS password_17, t14.id AS id_18, t14.createTime AS createtime_19, t14.updateTime AS updatetime_20, t14.profileId AS profileid_21 FROM "profile" t0 LEFT JOIN "user" t14 ON t14.profileId = t0.id WHERE t0.id = ? ["7d03c967be7e"] []

[2022-04-04T18:38:08.413336+00:00] doctrine.DEBUG: "COMMIT" [] []

@BacLuc
Copy link
Contributor

BacLuc commented Apr 5, 2022

@carlobeltrame is working on this i think

@usu
Copy link
Member Author

usu commented Apr 5, 2022

If I understood correctly, @carlobeltrame was working on the idea on how to specify serialization groups via request, which controls what data will be embedded in the response. However, the above behavior I observed even when no data was embedded.

First indication seems to be that this something Doctrine related and not API-platform related, but I might be wrong on this.

@carlobeltrame
Copy link
Member

carlobeltrame commented Apr 5, 2022

That is exactly right. Since I noticed that fixes like #2571 are not possible everywhere (e.g. the picasso can only load a list of schedule entries but not all their content nodes via a simple filter, so we either have to embed the content nodes or we have an n+1 problem), I started working on user-specified serialization groups.

@usu
Copy link
Member Author

usu commented Apr 6, 2022

Trying to further pinpoint on this, I believe the issue comes form the OnetoOne-Relation between AbstractContentNodeOwner->rootContentNode and ContentNode->owner.

The additional queries are triggered by the same code line here:
doctrine/orm#2239 (comment)

It's documented by Doctrine as a performance issue (see chapter "Performance impact" on below link):
https://www.doctrine-project.org/projects/doctrine-orm/en/2.11/reference/inheritance-mapping.html#class-table-inheritance

@carlobeltrame
Copy link
Member

Wow. This means that for performance it would actually be better if we eliminated the static, non-editable column layout at the root of the content node tree, and changed the relation activity <-> contentNode to a oneToMany relation. But that might make the logic more complicated in different places instead, not sure.

@usu
Copy link
Member Author

usu commented Apr 7, 2022

If the target-entity of a many-to-one or one-to-one association is a CTI entity, it is preferable for performance reasons that it be a leaf entity in the inheritance hierarchy, (ie. have no subclasses).

I struggle a bit to understand why a many-to-one & one-to-one relation has this impact, but a one-to-many relation should be ok. Maybe a one-to-one could also work by changing the owning side. Although in our case both AbstractContentNodeOwner and ContentNode contain subclasses, so we might face the issue anyway one way or the other.

Probably worth experimenting a bit to see what works and also if it really makes a change (or whether the performance impact comes from somewhere else). Options I see:

  1. One-to-one but changing the owning side (but owner property needs to be nullable)
  2. Option 1 + getting rid of AbstractContentNodeOwner by mapping ownership via two different properties activity & category instead of owner only.
  3. One-to-many from AbstractContentNodeOwner->rootContentNodes to ContentNode->owner
  4. Mapping AbstractContentNodeOwner->rootContentNode directly to ColumnLayout (leaf node) or even to a new specific RootContentNode subclass

@usu usu added Meeting Discuss Am nächsten Core-Meeting besprechen labels Apr 12, 2022
@usu usu self-assigned this Apr 12, 2022
@usu
Copy link
Member Author

usu commented Apr 12, 2022

Other options:

@manuelmeister manuelmeister removed the Meeting Discuss Am nächsten Core-Meeting besprechen label Apr 12, 2022
@usu
Copy link
Member Author

usu commented Apr 13, 2022

Trying to dig a bit further down the rabbit hole.

As to my current understanding, the following examples could lead to additional SQL-queries and therefore to a potential performance problem.

Bidirectional OneToOne (from inverse side; no inheritance)

Even without inheritance, bidirectional OneToOne-relations cannot be lazy loaded from the inverse side (the side without foreign-key).
Why: Without querying the relation, doctrine doesn't know if the other side exists (Proxy needed) or not (null value). So it needs to load the owning side as well. The additional query could be avoided by joining (eager loading), which should have minimal performance impact.
api-platform/core#2866
doctrine/orm#4389 (comment)
doctrine/orm#4389 (comment)

OneToOne (owning side) and ManyToOne, if target entity is an abstract class (inheritance)

This case is similar to the one above. In this case, doctrine has a foreign-key, but it doesn't know the class type of the target entity without loading it. So doctrine knows whether it should create a Proxy or not, however it doesn't know which type of Proxy to create.
doctrine/orm#4389 (comment)

OneToMany

OneToMany is never a problem (both with or without inheritance), because doctrine always creates an empty collection, independent of whether there are any items in the collection (and also which type of entities). The collection serves as the proxy in this case.

Workarounds & solutions

Community discussed workarounds/solutions (other than the ones already discussed above).

For the OneToOne-relation:

For the ContentNode-Tree:

@carlobeltrame
Copy link
Member

For the content node tree, maybe we could also use nested set instead of parent relations. This is a much more efficient way of storing tree data structures in relational databases, once the initial boilerplate code is written to transform e.g. ->children calls into the correct SQL. There is already an implementation of this in doctrine extensions nestedset. Not 100% sure, but that might help with the eager loading problems, since the relations are not normal doctrine relations anymore.

N.B. in hitobito, the group hierarchy is also implemented using a nested set implementation from an external package, and there it works great.

@usu usu added the Meeting Discuss Am nächsten Core-Meeting besprechen label Apr 17, 2022
@usu
Copy link
Member Author

usu commented Apr 26, 2022

As discussed try to make option 1 mergeable with following changes:

  • Remove owner property
  • Don't store camp redundantly on ContentNode
  • Implement new Voter for security checks of ContentNode (+ new interface + new DB query)

@usu usu removed the Meeting Discuss Am nächsten Core-Meeting besprechen label Aug 25, 2022
@BacLuc
Copy link
Contributor

BacLuc commented Feb 14, 2023

Can we close this issue?

@usu
Copy link
Member Author

usu commented Feb 14, 2023

Discussed improvements were implemented in #2683 and further extended in #2825

@usu usu closed this as completed Feb 14, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants