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

Quick Search    Search Deep

Source code: org/hsqldb/HsqlName.java


1   /* Copyrights and Licenses
2    *
3    * This product includes Hypersonic SQL.
4    * Originally developed by Thomas Mueller and the Hypersonic SQL Group. 
5    *
6    * Copyright (c) 1995-2000 by the Hypersonic SQL Group. All rights reserved. 
7    * Redistribution and use in source and binary forms, with or without modification, are permitted
8    * provided that the following conditions are met: 
9    *     -  Redistributions of source code must retain the above copyright notice, this list of conditions
10   *         and the following disclaimer. 
11   *     -  Redistributions in binary form must reproduce the above copyright notice, this list of
12   *         conditions and the following disclaimer in the documentation and/or other materials
13   *         provided with the distribution. 
14   *     -  All advertising materials mentioning features or use of this software must display the
15   *        following acknowledgment: "This product includes Hypersonic SQL." 
16   *     -  Products derived from this software may not be called "Hypersonic SQL" nor may
17   *        "Hypersonic SQL" appear in their names without prior written permission of the
18   *         Hypersonic SQL Group. 
19   *     -  Redistributions of any form whatsoever must retain the following acknowledgment: "This
20   *          product includes Hypersonic SQL." 
21   * This software is provided "as is" and any expressed or implied warranties, including, but
22   * not limited to, the implied warranties of merchantability and fitness for a particular purpose are
23   * disclaimed. In no event shall the Hypersonic SQL Group or its contributors be liable for any
24   * direct, indirect, incidental, special, exemplary, or consequential damages (including, but
25   * not limited to, procurement of substitute goods or services; loss of use, data, or profits;
26   * or business interruption). However caused any on any theory of liability, whether in contract,
27   * strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this
28   * software, even if advised of the possibility of such damage. 
29   * This software consists of voluntary contributions made by many individuals on behalf of the
30   * Hypersonic SQL Group.
31   *
32   *
33   * For work added by the HSQL Development Group:
34   *
35   * Copyright (c) 2001-2002, The HSQL Development Group
36   * All rights reserved.
37   *
38   * Redistribution and use in source and binary forms, with or without
39   * modification, are permitted provided that the following conditions are met:
40   *
41   * Redistributions of source code must retain the above copyright notice, this
42   * list of conditions and the following disclaimer, including earlier
43   * license statements (above) and comply with all above license conditions.
44   *
45   * Redistributions in binary form must reproduce the above copyright notice,
46   * this list of conditions and the following disclaimer in the documentation
47   * and/or other materials provided with the distribution, including earlier
48   * license statements (above) and comply with all above license conditions.
49   *
50   * Neither the name of the HSQL Development Group nor the names of its
51   * contributors may be used to endorse or promote products derived from this
52   * software without specific prior written permission.
53   *
54   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
55   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
56   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
57   * ARE DISCLAIMED. IN NO EVENT SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG, 
58   * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
59   * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
60   * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
61   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
62   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
63   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
64   * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
65   */
66  
67  
68  package org.hsqldb;
69  
70  /**
71   * Name of an SQL object<p>
72   *
73   * Methods check user defined names and issue system generated names
74   * for SQL objects.<p>
75   *
76   * This class does not deal with the type of the SQL object for which it
77   * is used.<p>
78   *
79   * sysNumber is used to generate system generated names. It is
80   * set to the largest integer encountered in names that use the
81   * SYS_xxxxxxx_INTEGER format. As the DDL is processed before any ALTER
82   * command, any new system generated name will have a larger integer suffix
83   * than all the existing names.
84   *
85   * @author fredt@users
86   * @version 1.7.0
87   */
88  class HsqlName {
89  
90      String     name;
91      boolean    isNameQuoted;
92      String     statementName;
93      static int sysNumber = 0;
94  
95      public HsqlName(String name, boolean isquoted) {
96          rename(name, isquoted);
97      }
98  
99      public HsqlName(String prefix, String name, boolean isquoted) {
100         rename(prefix, name, isquoted);
101     }
102 
103     public static HsqlName makeAutoName(String type) {
104 
105         StringBuffer sbname = new StringBuffer();
106 
107         sbname.append("SYS_");
108         sbname.append(type);
109         sbname.append('_');
110         sbname.append(++sysNumber);
111 
112         return new HsqlName(sbname.toString(), false);
113     }
114 
115     public static HsqlName makeAutoName(String type, String namepart) {
116 
117         StringBuffer sbname = new StringBuffer();
118 
119         sbname.append("SYS_");
120         sbname.append(type);
121         sbname.append('_');
122         sbname.append(namepart);
123         sbname.append('_');
124         sbname.append(++sysNumber);
125 
126         return new HsqlName(sbname.toString(), false);
127     }
128 
129     public void rename(String name, boolean isquoted) {
130 
131         this.name          = name;
132         this.statementName = name;
133         this.isNameQuoted  = isquoted;
134 
135         if (name == null) {
136             return;
137         }
138 
139         if (isNameQuoted) {
140             statementName = StringConverter.toQuotedString(name, '"', true);
141         }
142 
143         if (name.startsWith("SYS_")) {
144             int index = name.lastIndexOf('_') + 1;
145 
146             try {
147                 int temp = Integer.parseInt(name.substring(index));
148 
149                 if (temp > sysNumber) {
150                     sysNumber = temp;
151                 }
152             } catch (NumberFormatException e) {}
153         }
154     }
155 
156     public void rename(String prefix, String name, boolean isquoted) {
157 
158         StringBuffer sbname = new StringBuffer(prefix);
159 
160         sbname.append('_');
161         sbname.append(name);
162         rename(sbname.toString(), isquoted);
163     }
164 
165     public boolean equals(HsqlName other) {
166         return name.equals(other.name) && isNameQuoted == other.isNameQuoted;
167     }
168 
169     /**
170      * "SYS_IDX_" is used for auto-indexes on referring FK columns or
171      * unique constraints.
172      * "SYS_PK_" is for the primary key indexes.
173      * "SYS_REF_" is for FK constraints in referenced tables
174      *
175      */
176     public static boolean isReservedName(String name) {
177 
178         if (name.startsWith("SYS_IDX_") || name.startsWith("SYS_PK_")
179                 || name.startsWith("SYS_REF_")) {
180             return true;
181         } else {
182             return false;
183         }
184     }
185 
186     public boolean isReservedName() {
187         return isReservedName(name);
188     }
189 }