Martin van den Bemt a écrit :

Sorry but I can't send you a pacth because I 've modified Slide's kernel code to impléments some new capabilities :
with my version I can :

setup "stopWords" in lucene (english or french) (I've sent the code to aslam bari see the slide-users archive) setup mergeFactor , min and max files ... in lucene (I 've sent the source code to bugzilla)

we notice a very strange behavior with RDBMSadapters The global performances slow down when the number of documents grows up
we made some change to correct this behavior .

Now, the changes are too intricate to send you a patch because if you run tests (or unit tests) unsuccessfully I can't tell you which modification make the test wrong (and it may be due to an unpredictable side effect)

So have a look to my code of course you can criticize it I will take into account your remarks, for my own I think the XXXXRDBMSAdapters are not commented at all so I can make a huge mistake when I modify this code


Regards

B DOREL



Would be nice if you can send a patch instead of attaching.. Also it's best to 
attach it to an issue
so we don't forget about it..
Activity is picking up from people who are able to commit, so I don't think 
this will end up in the
trash.. Since there is a lack of unit tests it could take a bit of time till we 
investigated the
patch though..

Thanx for the effort !

Mvgr,
Martin

Dorel bruno wrote:
Suite of my last message


Hi all

I've Found the bug concerning the GetChildren method the story is :
I use a version of PostgresRDBMSAdapter (which extends
StrandardRDBMSAdapter) which doesn't redefine the
clearBinding(Connection connection, Uri uri, Set UpdatedBindings)so the
Set of updatedBindings is ignored (see StrandardRDBMSAdapter) to avoid a
complete clear instaed of a "smart" clear (just the updated
bindings)I've written this method using the MySQL example and joined to
this mail the result source This works in my project.

Enjoy !(in fact I'm sure you gonna push it in your favorite trash as
usually)


Regards

B DOREL






Digging in the slide's code I have troubles with  the
StrandardRDBMSAdapter class

The method storeObject use the bindings attribute to fill the Binding
table it seems OK

The method retrieveObject use binding table to fill the children
attribute  This explain why getChildren returns nothing


Is it a bugg ? does anybody can explain me how this class works? The
source code of this class is so well commented ! 2 lines of comments
composed with three words each

Regards



B DOREL







Hi all

I have a trouble using structure.getChildren(token,parentNode) : this
method return an enumeration with 0 elements, but,  when I build the
structure I use the
node.addChild  method to set up children. To check it, I use a Postgres
JCDBA : I  list  the  parent_binding table evrythig is correct  and I
can see parents and children links in the tree structure.

Is there any known bugs  or patch concerning the getChildren method ?

From an other hand , I get spam messages with links to pornographics
sites :
subject   [Jakarta-slide  Wiki] Update of "FrontPage" by
AntoineLevyLambert   sender : Apache Wiki

I suppose (I'm sure)  Antoine is a nice  buddy  and  he has never  sent
this message  just be aware of  it !

Regards

B DOREL


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------------------------

Orange vous informe que cet  e-mail a ete controle par l'anti-virus mail.
Aucun virus connu a ce jour par nos services n'a ete detecte.






---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------------------------

Orange vous informe que cet  e-mail a ete controle par l'anti-virus mail.
Aucun virus connu a ce jour par nos services n'a ete detecte.





------------------------------------------------------------------------

/*
 * $Header: 
/home/cvspublic/jakarta-slide/src/stores/org/apache/slide/store/impl/rdbms/PostgresRDBMSAdapter.java,v
 1.20 2005/06/13 12:35:07 unico Exp $
 * $Revision: 1.20 $
 * $Date: 2005/06/13 12:35:07 $
 *
 * ====================================================================
 *
* Copyright 1999-2005 The Apache Software Foundation *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

package org.apache.slide.store.impl.rdbms;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.Set;

import org.apache.slide.common.Service;
import org.apache.slide.common.ServiceAccessException;
import org.apache.slide.common.Uri;
import org.apache.slide.content.NodeRevisionDescriptor;
import org.apache.slide.content.NodeRevisionNumber;
import org.apache.slide.lock.LockTokenNotFoundException;
import org.apache.slide.lock.NodeLock;
import org.apache.slide.security.NodePermission;
import org.apache.slide.structure.ObjectNode;
import org.apache.slide.structure.ObjectNotFoundException;
import org.apache.slide.util.logger.Logger;

/**
 * Adapter for Postgres 7.3/7.4.
* * The delete statements differ from StandardRDBMSAdapter
 * as Postgres does not understand "DELETE table FROM ...".
* * The Postgres driver for version 7.4.1 will alway load * the content into memory. This will be a problem for * large documents. * * @version $Revision: 1.20 $
 */

public class PostgresRDBMSAdapter extends StandardRDBMSAdapter implements 
SequenceAdapter {

        protected static String LOG_CHANNEL =
                PostgresRDBMSAdapter.class.getName();

    protected static String normalizeSequenceName(String sequenceName) {
        return sequenceName.replace('-', '_').toUpperCase() + "_SEQ";
    }

        public PostgresRDBMSAdapter(Service service, Logger logger) {
                super(service, logger);
        }

        public void removeObject(Connection connection, Uri uri, ObjectNode 
object)
                throws ServiceAccessException, ObjectNotFoundException {
                PreparedStatement statement = null;
                try {

                        clearBinding(connection, uri);

                        // delete links
                        try {
                                statement =
                                        connection.prepareStatement(
                                                "delete from LINKS where 
LINKS.URI_ID = URI.URI_ID and URI.URI_STRING = ?");
                                statement.setString(1, uri.toString());
                                statement.executeUpdate();
                        } finally {
                                close(statement);
                        }
                        // delete version history
                        // FIXME: Is this true??? Should the version history be 
removed if the object is removed???
                        try {
                                statement =
                                        connection.prepareStatement(
                                                "delete from VERSION_HISTORY  where 
VERSION_HISTORY.URI_ID = URI.URI_ID and URI.URI_STRING = ?");
                                statement.setString(1, uri.toString());
                                statement.executeUpdate();
                        } finally {
                                close(statement);
                        }
                        // delete version
                        try {
                                statement =
                                        connection.prepareStatement(
                                                "delete from VERSION where 
VERSION.URI_ID = URI.URI_ID and URI.URI_STRING = ?");
                                statement.setString(1, uri.toString());
                                statement.executeUpdate();
                        } finally {
                                close(statement);
                        }
                        // delete the object itself
                        try {
                                statement =
                                        connection.prepareStatement(
                                                "delete from OBJECT  where 
OBJECT.URI_ID = URI.URI_ID and URI.URI_STRING = ?");
                                statement.setString(1, uri.toString());
                                statement.executeUpdate();
                        } finally {
                                close(statement);
                        }
                        // finally delete the uri
                        try {
                                statement =
                                        connection.prepareStatement(
                                                "delete from URI where URI_STRING = 
?");
                                statement.setString(1, uri.toString());
                                statement.executeUpdate();
                        } finally {
                                close(statement);
                        }
                } catch (SQLException e) {
                        getLogger().log(e, LOG_CHANNEL, Logger.ERROR);
                        throw new ServiceAccessException(service, e);
                }
        }

        public void removeRevisionContent(
                Connection connection,
                Uri uri,
                NodeRevisionDescriptor revisionDescriptor)
                throws ServiceAccessException {
                try {
                        PreparedStatement statement = null;
                        try {
                                statement =
                                        connection.prepareStatement(
                                                "delete from VERSION_CONTENT where 
VERSION_CONTENT.VERSION_ID = VERSION_HISTORY.VERSION_ID and VERSION_HISTORY.REVISION_NO = 
? and VERSION_HISTORY.URI_ID=URI.URI_ID AND URI.URI_STRING=?");
                                statement.setString(
                                        1,
                                        
revisionDescriptor.getRevisionNumber().toString());
                                statement.setString(2, uri.toString());
                                statement.executeUpdate();
                        } finally {
                                close(statement);
                        }
                } catch (Exception e) {
                        getLogger().log(e, LOG_CHANNEL, Logger.ERROR);
                        throw new ServiceAccessException(service, e);
                }
        }

        public void removeRevisionDescriptor(
                Connection connection,
                Uri uri,
                NodeRevisionNumber revisionNumber)
                throws ServiceAccessException {
                PreparedStatement statement = null;
                try {
                        try {
                                statement =
                                        connection.prepareStatement(
                                                "delete from VERSION_LABELS where 
VERSION_LABELS.VERSION_ID = VERSION_HISTORY.VERSION_ID and VERSION_HISTORY.REVISION_NO = 
? and VERSION_HISTORY.URI_ID = URI.URI_ID AND URI.URI_STRING = ?");
                                statement.setString(1, 
revisionNumber.toString());
                                statement.setString(2, uri.toString());
                                statement.executeUpdate();
                        } finally {
                                close(statement);
                        }
                        try {
                                statement =
                                        connection.prepareStatement(
                                                "delete from PROPERTIES where 
PROPERTIES.VERSION_ID = VERSION_HISTORY.VERSION_ID and VERSION_HISTORY.REVISION_NO = ? 
and VERSION_HISTORY.URI_ID = URI.URI_ID AND URI.URI_STRING = ?");
                                statement.setString(1, 
revisionNumber.toString());
                                statement.setString(2, uri.toString());
                                statement.executeUpdate();
                        } finally {
                                close(statement);
                        }
                } catch (SQLException e) {
                        getLogger().log(e, LOG_CHANNEL, Logger.ERROR);
                        throw new ServiceAccessException(service, e);
                }
        }

    public void removeRevisionDescriptors(Connection connection, Uri uri) 
throws ServiceAccessException {
        PreparedStatement statement = null;
        try {
statement =
                connection.prepareStatement(
                "delete from VERSION_PREDS where VERSION_PREDS.VERSION_ID = 
VERSION_HISTORY.VERSION_ID and VERSION_HISTORY.URI_ID = URI.URI_ID and URI.URI_STRING = 
?");
            statement.setString(1, uri.toString());
            statement.executeUpdate();
        } catch (SQLException e) {
            throw createException(e, uri.toString());
        } finally {
            close(statement);
        }
    }

        public void removeLock(Connection connection, Uri uri, NodeLock lock)
                throws ServiceAccessException, LockTokenNotFoundException {
                PreparedStatement statement = null;
                try {
                        try {
                                statement =
                                        connection.prepareStatement(
                                                "delete from LOCKS where LOCK_ID = 
URI.URI_ID and URI.URI_STRING=?");
                                statement.setString(1, lock.getLockId());
                                statement.executeUpdate();
                        } finally {
                                close(statement);
                        }
                        try {
                                statement =
                                        connection.prepareStatement(
                                                "delete from URI where 
URI_STRING=?");
                                statement.setString(1, lock.getLockId());
            statement.executeUpdate();
                        } finally {
                                close(statement);
                        }
                } catch (SQLException e) {
                        getLogger().log(e, LOG_CHANNEL, Logger.ERROR);
                        throw new ServiceAccessException(service, e);
                }
        }

    public void revokePermission(Connection connection, Uri uri, NodePermission 
permission)
    throws ServiceAccessException {
        if (permission == null) return;
        final StringBuffer sql = new StringBuffer("delete from PERMISSIONS where 
(OBJECT_ID, SUBJECT_ID, ACTION_ID) IN" +
                " (SELECT ou.URI_ID, su.URI_ID, au.URI_ID FROM URI ou, URI su, URI 
au WHERE ou.URI_STRING = ? and su.URI_STRING = ? and au.URI_STRING = ?)");
                PreparedStatement statement = null;
                try {
            final NodeRevisionNumber revisionNumber = 
permission.getRevisionNumber();
            // generate proper sql based on content of revision number
            if (revisionNumber != null) {
                sql.append(" and VERSION_NO = ?");
            } else {
                sql.append(" and VERSION_NO IS NULL");
            }
            statement = connection.prepareStatement(sql.toString());
            statement.setString(1, uri.toString());
            statement.setString(2, permission.getSubjectUri());
            statement.setString(3, permission.getActionUri());
            if (revisionNumber != null) {
                statement.setString(4, revisionNumber.toString());
            }
            statement.executeUpdate();
                } catch (SQLException e) {
            throw createException(e, uri.toString());
                } finally {
                        close(statement);
                }
        }

        public void revokePermissions(Connection connection, Uri uri)
                throws ServiceAccessException {
                PreparedStatement statement = null;
                try {
                        statement =
                                connection.prepareStatement(
                                        "delete from PERMISSIONS where 
PERMISSIONS.OBJECT_ID = URI.URI_ID and URI.URI_STRING = ?");
                        statement.setString(1, uri.toString());
                        statement.executeUpdate();
                } catch (SQLException e) {
                        getLogger().log(e, LOG_CHANNEL, Logger.ERROR);
                        throw new ServiceAccessException(service, e);
                } finally {
                        close(statement);
                }
        }

    protected void clearBinding(Connection connection, Uri uri, Set 
updatedBindings)
       throws ServiceAccessException, ObjectNotFoundException, SQLException {
       PreparedStatement statement = null;

// clear this uri from having bindings and being bound int bsize = updatedBindings.size();
       //If there are bindings to update, only remove those from the database
       if (bsize > 0) {

           try {
               String bindings = "(";
               for (int i = 1; i < bsize; i++)
                   bindings = bindings + "?,";
               bindings = bindings + "?)";
               statement =
                   connection.prepareStatement(
                       "delete from BINDING where URI.URI_ID = BINDING.CHILD_UURI_ID 
and URI.URI_STRING IN "
                           + bindings);

               Iterator iter = updatedBindings.iterator();
               for (int i = 1; iter.hasNext(); i++) {
                   String next = iter.next().toString();
                   statement.setString(i, next);
               }
               statement.executeUpdate();
           } finally {
               close(statement);
           }

           try {
               statement =
                 connection.prepareStatement(
                    "delete from PARENT_BINDING where PARENT_BINDING.URI_ID = 
URI.URI_ID and URI.URI_STRING = ?");
               statement.setString(1, uri.toString());
               statement.executeUpdate();
           } finally {
               close(statement);
           }
       } else {
           //otherwise remove all related to the uri
           clearBinding(connection, uri);
       }

    }

        protected void clearBinding(Connection connection, Uri uri)
                throws ServiceAccessException, ObjectNotFoundException, 
SQLException {
                PreparedStatement statement = null;

// clear this uri from having bindings and being bound // getLogger().log("Clear bindings for " + uri.toString(),LOG_CHANNEL,Logger.INFO);
                try {
                        statement =
                                connection.prepareStatement(
                                        "delete from BINDING where (BINDING.URI_ID = 
URI.URI_ID and URI.URI_STRING = ?) ");
                        //or (BINDING.CHILD_UURI_ID = URI.URI_ID and URI.URI_STRING 
= ?");
                        statement.setString(1, uri.toString());
                        //statement.setString(2, uri.toString());
                        statement.executeUpdate();
                } finally {
                        close(statement);
                }

                try {
                        statement =
                                connection.prepareStatement(
                                        "delete from PARENT_BINDING where 
PARENT_BINDING.URI_ID = URI.URI_ID and URI.URI_STRING = ?");
                        //  or PARENT_BINDING.PARENT_UURI_ID = URI.URI_ID and 
URI.URI_STRING = ?");
                        statement.setString(1, uri.toString());
                        //statement.setString(2, uri.toString());
                        statement.executeUpdate();
                } finally {
                        close(statement);
                }
        }

    public boolean isSequenceSupported(Connection conn) {
        return true;
    }

    public boolean createSequence(Connection conn, String sequenceName) throws 
ServiceAccessException {

        String query = "CREATE SEQUENCE " + normalizeSequenceName(sequenceName);

        PreparedStatement statement = null;

        try {
            statement = conn.prepareStatement(query);
            statement.executeUpdate();
            return true;
        } catch (SQLException e) {
            throw new ServiceAccessException(service, e);
        } finally {
            close(statement);
        }

    }

    public long nextSequenceValue(Connection conn, String sequenceName) throws 
ServiceAccessException {
        String selectQuery = "SELECT nextval('" + 
normalizeSequenceName(sequenceName)+"');";

        PreparedStatement selectStatement = null;
        ResultSet res = null;

        try {
            selectStatement = conn.prepareStatement(selectQuery);
            res = selectStatement.executeQuery();
            if (!res.next()) {
                throw new ServiceAccessException(service, "Could not increment 
sequence " + sequenceName);
            }
            long value = res.getLong(1);
            return value;
        } catch (SQLException e) {
            throw new ServiceAccessException(service, e);
        } finally {
            close(selectStatement, res);
        }
    }

    public boolean sequenceExists(Connection conn, String sequenceName) throws 
ServiceAccessException {

        PreparedStatement selectStatement = null;
        ResultSet res = null;

        try {
            selectStatement = conn.prepareStatement("SELECT * FROM " + 
normalizeSequenceName(sequenceName));
            res = selectStatement.executeQuery();
            return true;
        } catch (SQLException e) {
            return false;
        } finally {
            close(selectStatement, res);
        }
    }
protected String convertRevisionNumberToComparable(String revisioNumber) {
        return "cast(split_part("
            + revisioNumber
            + ", '.', 1) as numeric), cast(split_part("
            + revisioNumber
            + ", '.', 2) as numeric)";
    }

}



------------------------------------------------------------------------

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------------------------
Orange vous informe que cet e-mail a ete controle par l'anti-virus mail. Aucun virus connu a ce jour par nos services n'a ete detecte.







---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to