Details
-
Bug
-
Resolution: Fixed
-
Medium
-
3.9.2
-
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_idSteps 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.