Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/objectstyle/cayenne/dba/hsqldb/HSQLDBAdapter.java


1   /* ====================================================================
2    * 
3    * The ObjectStyle Group Software License, Version 1.0 
4    *
5    * Copyright (c) 2002-2003 The ObjectStyle Group 
6    * and individual authors of the software.  All rights reserved.
7    *
8    * Redistribution and use in source and binary forms, with or without
9    * modification, are permitted provided that the following conditions
10   * are met:
11   *
12   * 1. Redistributions of source code must retain the above copyright
13   *    notice, this list of conditions and the following disclaimer. 
14   *
15   * 2. Redistributions in binary form must reproduce the above copyright
16   *    notice, this list of conditions and the following disclaimer in
17   *    the documentation and/or other materials provided with the
18   *    distribution.
19   *
20   * 3. The end-user documentation included with the redistribution, if
21   *    any, must include the following acknowlegement:  
22   *       "This product includes software developed by the 
23   *        ObjectStyle Group (http://objectstyle.org/)."
24   *    Alternately, this acknowlegement may appear in the software itself,
25   *    if and wherever such third-party acknowlegements normally appear.
26   *
27   * 4. The names "ObjectStyle Group" and "Cayenne" 
28   *    must not be used to endorse or promote products derived
29   *    from this software without prior written permission. For written 
30   *    permission, please contact andrus@objectstyle.org.
31   *
32   * 5. Products derived from this software may not be called "ObjectStyle"
33   *    nor may "ObjectStyle" appear in their names without prior written
34   *    permission of the ObjectStyle Group.
35   *
36   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39   * DISCLAIMED.  IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
40   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47   * SUCH DAMAGE.
48   * ====================================================================
49   *
50   * This software consists of voluntary contributions made by many
51   * individuals on behalf of the ObjectStyle Group.  For more
52   * information on the ObjectStyle Group, please see
53   * <http://objectstyle.org/>.
54   *
55   */ 
56  
57  package org.objectstyle.cayenne.dba.hsqldb;
58  
59  import java.util.Iterator;
60  
61  import org.objectstyle.cayenne.dba.JdbcAdapter;
62  import org.objectstyle.cayenne.map.DbAttributePair;
63  import org.objectstyle.cayenne.map.DbEntity;
64  import org.objectstyle.cayenne.map.DbRelationship;
65  
66  /**
67   * DbAdapter implementation for the <a href="http://hsqldb.sourceforge.net/">
68   * HSQLDB RDBMS</a>. Sample <a target="_top" 
69   * href="../../../../../../../developerguide/unit-tests.html">connection 
70   * settings</a> to use with HSQLDB are shown below:
71   * 
72  <pre>
73  test-hsqldb.cayenne.adapter = org.objectstyle.cayenne.dba.hsqldb.HSQLDBAdapter
74  test-hsqldb.jdbc.username = test
75  test-hsqldb.jdbc.password = secret
76  test-hsqldb.jdbc.url = jdbc:hsqldb:hsql://serverhostname
77  test-hsqldb.jdbc.driver = org.hsqldb.jdbcDriver
78  </pre>
79   *
80   * @author Holger Hoffstaette
81   */
82  public class HSQLDBAdapter extends JdbcAdapter {
83  
84    /**
85     * Adds an ADD CONSTRAINT clause to a relationship constraint.
86     * @see JdbcAdapter#createFkConstraint(DbRelationship)
87     */
88    public String createFkConstraint(DbRelationship rel) {
89      StringBuffer buf = new StringBuffer();
90      StringBuffer refBuf = new StringBuffer();
91  
92      String srcName = ((DbEntity)rel.getSourceEntity()).getFullyQualifiedName();
93      String dstName = ((DbEntity)rel.getTargetEntity()).getFullyQualifiedName();
94  
95      buf.append("ALTER TABLE ");
96      buf.append(srcName);
97  
98      // hsqldb requires the ADD CONSTRAINT statement
99      buf.append(" ADD CONSTRAINT ");
100     buf.append("C_");
101     buf.append(srcName);
102     buf.append("_");
103     buf.append((long)(System.currentTimeMillis()/(Math.random()*100000)));
104 
105     buf.append(" FOREIGN KEY (");
106 
107     Iterator jit = rel.getJoins().iterator();
108     boolean first = true;
109     while (jit.hasNext()) {
110       DbAttributePair join = (DbAttributePair) jit.next();
111       if (!first) {
112         buf.append(", ");
113         refBuf.append(", ");
114       } else
115         first = false;
116 
117       buf.append(join.getSource().getName());
118       refBuf.append(join.getTarget().getName());
119     }
120 
121     buf.append(") REFERENCES ");
122     buf.append(dstName);
123     buf.append(" (");
124     buf.append(refBuf.toString());
125     buf.append(')');
126 
127     // also make sure we delete dependent FKs
128     buf.append(" ON DELETE CASCADE");
129 
130     return buf.toString();
131   }
132 }
133