Uploaded image for project: 'eZ Publish / Platform'
  1. eZ Publish / Platform
  2. EZP-11332

group policy causes sql errors

    XMLWordPrintable

Details

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Medium Medium
    • 3.10.0
    • 3.9.2
    • Database related
    • None
    • Operating System: linux
      PHP Version: (please be specific, like '4.4.3' or '5.1.5')
      Database and version: mysql 5
      Browser (and version):

    Description

      Index: /ez/trunk/patches/kernel/classes/ezcontentobjecttreenode.php
      ===================================================================
      if you use the condition

      content -> read -> group -> self

      you get sometimes sql errors when creating / deleting tmp tables:

      Query error: Table 'ezgroup_perm_tmp_0' already exists. Query: CREATE TEMPORARY TABLE ezgroup_perm_tmp_0 ( user_id int )
      Query error: Unknown table 'ezgroup_perm_tmp_0'. Query: DROP TABLE ezgroup_perm_tmp_0

      I fix it up. My Patch only create a new Tmp table if it not already exists.
      In our current project this saves between 30 and 150 sql query, too. (nice effect )

      revision 119 = ez 3.9.2
      revision 121 is my patched version

      — /ez/trunk/patches/kernel/classes/ezcontentobjecttreenode.php (revision 122)
      +++ /ez/trunk/patches/kernel/classes/ezcontentobjecttreenode.php (revision 135)
      @@ -1550,10 +1550,20 @@

      $groupPermTempTable = $db->generateUniqueTempTableName( 'ezgroup_perm_tmp_%_0' );

      • $tempTables[] = $groupPermTempTable;
        -
      • if ( $sqlPermissionCheckingFrom == '' )
      • $sqlPermissionCheckingFrom = ', ' . $groupPermTempTable;
        -
      • $db->createTempTable( "CREATE TEMPORARY TABLE $groupPermTempTable ( user_id int )" );
        +
        + // patch Felix - sql errors because of multiple temp tables of the same name
        + // => generateUniqueTempTableName return not a unique name !!!!!
        + // Query error: Table 'ezgroup_perm_tmp_0' already exists. Query: CREATE TEMPORARY TABLE ezgroup_perm_tmp_0 ( user_id int )
        + // Query error: Unknown table 'ezgroup_perm_tmp_0'. Query: DROP TABLE ezgroup_perm_tmp_0
        + //
        + // if temptable not exists
        + if( !in_array( $groupPermTempTable, $tempTables) )
        + { + $tempTables[] = $groupPermTempTable; + + if ( $sqlPermissionCheckingFrom == '' ) + $sqlPermissionCheckingFrom = ', ' . $groupPermTempTable; + + $db->createTempTable( "CREATE TEMPORARY TABLE $groupPermTempTable ( user_id int )" ); + }

        $db->query( "INSERT INTO $groupPermTempTable
        SELECT DISTINCT contentobject_id AS user_id
        @@ -2719,10 +2729,21 @@

      $groupPermTempTable = $db->generateUniqueTempTableName( 'ezgroup_perm_tmp_%_0' );

      • $sqlPermissionTempTables[] = $groupPermTempTable;
        -
      • if ( $sqlPermissionCheckingFrom == '' )
      • $sqlPermissionCheckingFrom = ', ' . $groupPermTempTable;
        -
      • $db->createTempTable( "CREATE TEMPORARY TABLE $groupPermTempTable ( user_id int )" );
        +
        + // patch Felix - sql errors because of multiple temp tables of the same name
        + // => generateUniqueTempTableName return not a unique name !!!!!
        + // Query error: Table 'ezgroup_perm_tmp_0' already exists. Query: CREATE TEMPORARY TABLE ezgroup_perm_tmp_0 ( user_id int )
        + // Query error: Unknown table 'ezgroup_perm_tmp_0'. Query: DROP TABLE ezgroup_perm_tmp_0
        + //
        + // if temptable not exists
        + if( !in_array( $groupPermTempTable, $sqlPermissionTempTables) )
        + { + + $sqlPermissionTempTables[] = $groupPermTempTable; + + if ( $sqlPermissionCheckingFrom == '' ) + $sqlPermissionCheckingFrom = ', ' . $groupPermTempTable; + + $db->createTempTable( "CREATE TEMPORARY TABLE $groupPermTempTable ( user_id int )" ); + }

        $db->query( "INSERT INTO $groupPermTempTable
        SELECT DISTINCT contentobject_id AS user_id

        Steps to reproduce

        Adding to a role the policy

      content -> read -> group -> self
      maybe several other group policys

      Login a user with is assigned to this group, then all fetches e.g. fetch('content', 'tree' ...
      get multiple results of the same nodes.

      Attachments

        Activity

          People

            rl rl
            4d91e976-d41f-487b-ae85-f7216bd06dac@accounts.ibexa.co Felix Woldt
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: