~ubuntu-branches/ubuntu/maverick/hsqldb/maverick

« back to all changes in this revision

Viewing changes to src/org/hsqldb/DatabaseScript.java

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2006-09-26 11:47:49 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20060926114749-3jd0utm7w21x1iqt
Tags: 1.8.0.5-2ubuntu1
* Synchronise with Debian unstable; remaining changes:
  - build using java-gcj-compat.
* libhsqldb-java: Add gij as alternative dependency.
* Build a libhsqldb-java-gcj package.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* Copyright (c) 1995-2000, The Hypersonic SQL Group.
2
 
 * All rights reserved.
3
 
 *
4
 
 * Redistribution and use in source and binary forms, with or without
5
 
 * modification, are permitted provided that the following conditions are met:
6
 
 *
7
 
 * Redistributions of source code must retain the above copyright notice, this
8
 
 * list of conditions and the following disclaimer.
9
 
 *
10
 
 * Redistributions in binary form must reproduce the above copyright notice,
11
 
 * this list of conditions and the following disclaimer in the documentation
12
 
 * and/or other materials provided with the distribution.
13
 
 *
14
 
 * Neither the name of the Hypersonic SQL Group nor the names of its
15
 
 * contributors may be used to endorse or promote products derived from this
16
 
 * software without specific prior written permission.
17
 
 *
18
 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
 
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
 
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21
 
 * ARE DISCLAIMED. IN NO EVENT SHALL THE HYPERSONIC SQL GROUP,
22
 
 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23
 
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24
 
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25
 
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26
 
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
 
 * (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
 
 *
30
 
 * This software consists of voluntary contributions made by many individuals 
31
 
 * on behalf of the Hypersonic SQL Group.
32
 
 *
33
 
 *
34
 
 * For work added by the HSQL Development Group:
35
 
 *
36
 
 * Copyright (c) 2001-2005, The HSQL Development Group
37
 
 * All rights reserved.
38
 
 *
39
 
 * Redistribution and use in source and binary forms, with or without
40
 
 * modification, are permitted provided that the following conditions are met:
41
 
 *
42
 
 * Redistributions of source code must retain the above copyright notice, this
43
 
 * list of conditions and the following disclaimer.
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.
48
 
 *
49
 
 * Neither the name of the HSQL Development Group nor the names of its
50
 
 * contributors may be used to endorse or promote products derived from this
51
 
 * software without specific prior written permission.
52
 
 *
53
 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
54
 
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
55
 
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
56
 
 * ARE DISCLAIMED. IN NO EVENT SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG,
57
 
 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
58
 
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
59
 
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
60
 
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
61
 
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
62
 
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
63
 
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
64
 
 */
65
 
 
66
 
 
 
1
/* Copyright (c) 1995-2000, The Hypersonic SQL Group.
 
2
 * All rights reserved.
 
3
 *
 
4
 * Redistribution and use in source and binary forms, with or without
 
5
 * modification, are permitted provided that the following conditions are met:
 
6
 *
 
7
 * Redistributions of source code must retain the above copyright notice, this
 
8
 * list of conditions and the following disclaimer.
 
9
 *
 
10
 * Redistributions in binary form must reproduce the above copyright notice,
 
11
 * this list of conditions and the following disclaimer in the documentation
 
12
 * and/or other materials provided with the distribution.
 
13
 *
 
14
 * Neither the name of the Hypersonic SQL Group nor the names of its
 
15
 * contributors may be used to endorse or promote products derived from this
 
16
 * software without specific prior written permission.
 
17
 *
 
18
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 
19
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
20
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 
21
 * ARE DISCLAIMED. IN NO EVENT SHALL THE HYPERSONIC SQL GROUP,
 
22
 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 
23
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 
24
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 
25
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 
26
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 
27
 * (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
 *
 
30
 * This software consists of voluntary contributions made by many individuals 
 
31
 * on behalf of the Hypersonic SQL Group.
 
32
 *
 
33
 *
 
34
 * For work added by the HSQL Development Group:
 
35
 *
 
36
 * Copyright (c) 2001-2005, The HSQL Development Group
 
37
 * All rights reserved.
 
38
 *
 
39
 * Redistribution and use in source and binary forms, with or without
 
40
 * modification, are permitted provided that the following conditions are met:
 
41
 *
 
42
 * Redistributions of source code must retain the above copyright notice, this
 
43
 * list of conditions and the following disclaimer.
 
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.
 
48
 *
 
49
 * Neither the name of the HSQL Development Group nor the names of its
 
50
 * contributors may be used to endorse or promote products derived from this
 
51
 * software without specific prior written permission.
 
52
 *
 
53
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 
54
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
55
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 
56
 * ARE DISCLAIMED. IN NO EVENT SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG,
 
57
 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 
58
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 
59
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 
60
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 
61
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 
62
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 
63
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
64
 */
 
65
 
 
66
 
67
67
package org.hsqldb;
68
68
 
69
69
import org.hsqldb.HsqlNameManager.HsqlName;
120
120
            role = (String) it.next();
121
121
 
122
122
            // ADMIN_ROLE_NAME is not persisted
123
 
            if (!GranteeManager.ADMIN_ROLE_NAME.equals(role)) {
 
123
            if (!GranteeManager.DBA_ADMIN_ROLE_NAME.equals(role)) {
124
124
                addRow(r, "CREATE ROLE " + role);
125
125
            }
126
126
        }
184
184
        Iterator schemas = database.schemaManager.userSchemaNameIterator();
185
185
 
186
186
        while (schemas.hasNext()) {
187
 
            HsqlName schema = database.schemaManager.toSchemaHsqlName(
188
 
                (String) schemas.next());
 
187
            String schemaKey = (String) schemas.next();
 
188
            HsqlName schema =
 
189
                database.schemaManager.toSchemaHsqlName(schemaKey);
189
190
            HashMappedList tTable =
190
191
                database.schemaManager.getTables(schema.name);
191
192
            HsqlArrayList forwardFK = new HsqlArrayList();
192
193
 
193
194
            // schema creation
194
 
            StringBuffer ab = new StringBuffer(128);
 
195
            {
 
196
                String ddl = getSchemaCreateDDL(database, schema);
195
197
 
196
 
            ab.append(Token.T_CREATE).append(' ');
197
 
            ab.append(Token.T_SCHEMA).append(' ');
198
 
            ab.append(schema.statementName).append(' ');
199
 
            ab.append(Token.T_AUTHORIZATION).append(' ');
200
 
            ab.append(GranteeManager.ADMIN_ROLE_NAME);
201
 
            addRow(r, ab.toString());
 
198
                addRow(r, ddl);
 
199
            }
202
200
 
203
201
            // sequences
204
202
            /*
353
351
            for (int i = 0, tSize = tTable.size(); i < tSize; i++) {
354
352
                Table t = (Table) tTable.get(i);
355
353
 
356
 
                if (!t.isCached()) {
 
354
                if (!t.isTemp()) {
357
355
                    String ddl = getIdentityUpdateDDL(t);
358
356
 
359
357
                    addRow(r, ddl);
426
424
        return a.toString();
427
425
    }
428
426
 
 
427
    static String getSchemaCreateDDL(Database database, HsqlName schemaName) {
 
428
 
 
429
        StringBuffer ab = new StringBuffer(128);
 
430
 
 
431
        ab.append(Token.T_CREATE).append(' ');
 
432
        ab.append(Token.T_SCHEMA).append(' ');
 
433
        ab.append(schemaName.statementName).append(' ');
 
434
        ab.append(Token.T_AUTHORIZATION).append(' ');
 
435
        ab.append(GranteeManager.DBA_ADMIN_ROLE_NAME);
 
436
 
 
437
        return ab.toString();
 
438
    }
 
439
 
429
440
    static void getTableDDL(Database database, Table t, int i,
430
441
                            HsqlArrayList forwardFK, boolean useSchema,
431
442
                            StringBuffer a) {
454
465
        a.append(t.getName().statementName);
455
466
        a.append('(');
456
467
 
457
 
        int   columns = t.getColumnCount();
458
 
        Index pki     = t.getIndex(0);
459
 
        int[] pk      = pki.getColumns();
 
468
        int        columns = t.getColumnCount();
 
469
        int[]      pk      = t.getPrimaryKey();
 
470
        HsqlName   pkName  = null;
 
471
        Constraint pkConst = t.getPrimaryConstraint();
 
472
 
 
473
        if (pkConst != null &&!pkConst.getName().isReservedIndexName()) {
 
474
            pkName = pkConst.getName();
 
475
        }
460
476
 
461
477
        for (int j = 0; j < columns; j++) {
462
478
            Column column  = t.getColumn(j);
517
533
                    Token.T_NULL);
518
534
            }
519
535
 
520
 
            if ((pk.length == 1) && (j == pk[0])
521
 
                    && pki.getName().isReservedIndexName()) {
 
536
            if ((pk.length == 1) && (j == pk[0]) && pkName == null) {
522
537
                a.append(' ').append(Token.T_PRIMARY).append(' ').append(
523
538
                    Token.T_KEY);
524
539
            }
528
543
            }
529
544
        }
530
545
 
531
 
        if (pk.length > 1
532
 
                || (pk.length == 1 &&!pki.getName().isReservedIndexName())) {
 
546
        if (pk.length > 1 || (pk.length == 1 && pkName != null)) {
533
547
            a.append(',');
534
548
 
535
 
            if (!pki.getName().isReservedIndexName()) {
 
549
            if (pkName != null) {
536
550
                a.append(Token.T_CONSTRAINT).append(' ');
537
 
                a.append(pki.getName().statementName).append(' ');
 
551
                a.append(pkName.statementName).append(' ');
538
552
            }
539
553
 
540
554
            a.append(Token.T_PRIMARY).append(' ').append(Token.T_KEY);