Package org.hsqldb

Source Code of org.hsqldb.DatabaseScript

package org.hsqldb;

import org.hsqldb.lib.Collection;
import org.hsqldb.lib.HashMap;
import org.hsqldb.lib.HashMappedList;
import org.hsqldb.lib.HsqlArrayList;
import org.hsqldb.lib.IntValueHashMap;
import org.hsqldb.lib.Iterator;
import org.hsqldb.lib.Set;
import org.hsqldb.lib.StringConverter;
import org.hsqldb.persist.Logger;

public class DatabaseScript
{
  public static Result getScript(Database paramDatabase, boolean paramBoolean)
  {
    Result localResult = Result.newSingleColumnResult("COMMAND", 12);
    localResult.metaData.tableNames[0] = "SYSTEM_SCRIPT";
    String str1;
    if (paramDatabase.collation.name != null)
    {
      str1 = StringConverter.toQuotedString(paramDatabase.collation.name, '"', true);
      addRow(localResult, "SET DATABASE COLLATION " + str1);
    }
    Iterator localIterator = paramDatabase.getGranteeManager().getRoleNames().iterator();
    while (localIterator.hasNext())
    {
      str1 = (String)localIterator.next();
      if ("DBA".equals(str1))
        continue;
      addRow(localResult, "CREATE ROLE " + str1);
    }
    HashMap localHashMap1 = paramDatabase.getAliasMap();
    HashMap localHashMap2 = Library.getAliasMap();
    localIterator = localHashMap1.keySet().iterator();
    String str4;
    while (localIterator.hasNext())
    {
      String str2 = (String)localIterator.next();
      String str3 = (String)localHashMap1.get(str2);
      str4 = (String)localHashMap2.get(str2);
      if ((str4 != null) && (str4.equals(str3)))
        continue;
      StringBuffer localStringBuffer = new StringBuffer(64);
      localStringBuffer.append("CREATE").append(' ').append("ALIAS").append(' ');
      localStringBuffer.append(str2);
      localStringBuffer.append(" FOR \"");
      localStringBuffer.append(str3);
      localStringBuffer.append('"');
      addRow(localResult, localStringBuffer.toString());
    }
    addSchemaStatements(paramDatabase, localResult, paramBoolean);
    addRightsStatements(paramDatabase, localResult);
    if (paramDatabase.logger.hasLog())
    {
      int i = paramDatabase.logger.getWriteDelay();
      int j = i < 1000 ? 1 : 0;
      if (j != 0)
      {
        if ((i != 0) && (i < 20))
          i = 20;
      }
      else
        i /= 1000;
      str4 = "SET WRITE_DELAY " + i + (j != 0 ? " MILLIS" : "");
      addRow(localResult, str4);
    }
    return localResult;
  }

  static void addSchemaStatements(Database paramDatabase, Result paramResult, boolean paramBoolean)
  {
    Iterator localIterator = paramDatabase.schemaManager.userSchemaNameIterator();
    while (localIterator.hasNext())
    {
      String str = (String)localIterator.next();
      HsqlNameManager.HsqlName localHsqlName = paramDatabase.schemaManager.toSchemaHsqlName(str);
      HashMappedList localHashMappedList = paramDatabase.schemaManager.getTables(localHsqlName.name);
      HsqlArrayList localHsqlArrayList1 = new HsqlArrayList();
      Object localObject1 = getSchemaCreateDDL(paramDatabase, localHsqlName);
      addRow(paramResult, (String)localObject1);
      localObject1 = paramDatabase.schemaManager.sequenceIterator(localHsqlName.name);
      while (((Iterator)localObject1).hasNext())
      {
        NumberSequence localNumberSequence = (NumberSequence)((Iterator)localObject1).next();
        StringBuffer localStringBuffer = new StringBuffer(128);
        localStringBuffer.append("CREATE").append(' ');
        localStringBuffer.append("SEQUENCE").append(' ');
        localStringBuffer.append(localNumberSequence.getName().statementName).append(' ');
        localStringBuffer.append("AS").append(' ');
        localStringBuffer.append(Types.getTypeString(localNumberSequence.getType())).append(' ');
        localStringBuffer.append("START").append(' ');
        localStringBuffer.append("WITH").append(' ');
        localStringBuffer.append(localNumberSequence.peek()).append(' ');
        if (localNumberSequence.getIncrement() != 1L)
        {
          localStringBuffer.append("INCREMENT").append(' ');
          localStringBuffer.append("BY").append(' ');
          localStringBuffer.append(localNumberSequence.getIncrement()).append(' ');
        }
        addRow(paramResult, localStringBuffer.toString());
      }
      int i = 0;
      int j = localHashMappedList.size();
      Object localObject2;
      Object localObject3;
      Object localObject5;
      int i1;
      Object localObject4;
      int n;
      while (i < j)
      {
        localObject2 = (Table)localHashMappedList.get(i);
        if (!((Table)localObject2).isView())
        {
          localObject3 = new StringBuffer(128);
          getTableDDL(paramDatabase, (Table)localObject2, i, localHsqlArrayList1, false, (StringBuffer)localObject3);
          addRow(paramResult, ((StringBuffer)localObject3).toString());
          for (int m = 1; m < ((Table)localObject2).getIndexCount(); m++)
          {
            localObject5 = ((Table)localObject2).getIndex(m);
            if (HsqlNameManager.HsqlName.isReservedName(((Index)localObject5).getName().name))
              continue;
            localObject3 = new StringBuffer(64);
            ((StringBuffer)localObject3).append("CREATE").append(' ');
            if (((Index)localObject5).isUnique())
              ((StringBuffer)localObject3).append("UNIQUE").append(' ');
            ((StringBuffer)localObject3).append("INDEX").append(' ');
            ((StringBuffer)localObject3).append(((Index)localObject5).getName().statementName);
            ((StringBuffer)localObject3).append(' ').append("ON").append(' ');
            ((StringBuffer)localObject3).append(((Table)localObject2).getName().statementName);
            int[] arrayOfInt = ((Index)localObject5).getColumns();
            i1 = ((Index)localObject5).getVisibleColumns();
            getColumnList((Table)localObject2, arrayOfInt, i1, (StringBuffer)localObject3);
            addRow(paramResult, ((StringBuffer)localObject3).toString());
          }
          if ((((Table)localObject2).isText()) && (((Table)localObject2).isConnected()) && (((Table)localObject2).isDataReadOnly()))
          {
            localObject3 = new StringBuffer(64);
            ((StringBuffer)localObject3).append("SET").append(' ').append("TABLE").append(' ');
            ((StringBuffer)localObject3).append(((Table)localObject2).getName().statementName);
            ((StringBuffer)localObject3).append(' ').append("READONLY").append(' ').append("TRUE");
            addRow(paramResult, ((StringBuffer)localObject3).toString());
          }
          localObject4 = getDataSource((Table)localObject2);
          if (localObject4 != null)
            addRow(paramResult, (String)localObject4);
          localObject5 = getDataSourceHeader((Table)localObject2);
          if ((!paramBoolean) && (localObject5 != null))
            addRow(paramResult, (String)localObject5);
          n = 12;
          for (i1 = 0; i1 < n; i1++)
          {
            HsqlArrayList localHsqlArrayList2 = localObject2.triggerLists[i1];
            if (localHsqlArrayList2 == null)
              continue;
            int i2 = localHsqlArrayList2.size();
            for (int i3 = 0; i3 < i2; i3++)
            {
              localObject3 = ((TriggerDef)localHsqlArrayList2.get(i3)).getDDL();
              addRow(paramResult, ((StringBuffer)localObject3).toString());
            }
          }
        }
        i++;
      }
      i = 0;
      j = localHsqlArrayList1.size();
      while (i < j)
      {
        localObject2 = (Constraint)localHsqlArrayList1.get(i);
        localObject3 = new StringBuffer(128);
        ((StringBuffer)localObject3).append("ALTER").append(' ').append("TABLE").append(' ');
        ((StringBuffer)localObject3).append(((Constraint)localObject2).getRef().getName().statementName);
        ((StringBuffer)localObject3).append(' ').append("ADD").append(' ');
        getFKStatement((Constraint)localObject2, (StringBuffer)localObject3);
        addRow(paramResult, ((StringBuffer)localObject3).toString());
        i++;
      }
      Session localSession = paramDatabase.sessionManager.getSysSession();
      j = 0;
      int k = localHashMappedList.size();
      while (j < k)
      {
        localObject3 = (Table)localHashMappedList.get(j);
        if ((paramBoolean) && (((Table)localObject3).isIndexCached()) && (!((Table)localObject3).isEmpty(localSession)))
          addRow(paramResult, getIndexRootsDDL((Table)localHashMappedList.get(j)));
        j++;
      }
      j = 0;
      k = localHashMappedList.size();
      while (j < k)
      {
        localObject3 = (Table)localHashMappedList.get(j);
        if (!((Table)localObject3).isTemp())
        {
          localObject4 = getIdentityUpdateDDL((Table)localObject3);
          addRow(paramResult, (String)localObject4);
        }
        j++;
      }
      j = 0;
      k = localHashMappedList.size();
      while (j < k)
      {
        localObject3 = (Table)localHashMappedList.get(j);
        if (((Table)localObject3).isView())
        {
          localObject4 = (View)localHashMappedList.get(j);
          localObject5 = new StringBuffer(128);
          ((StringBuffer)localObject5).append("CREATE").append(' ').append("VIEW").append(' ');
          ((StringBuffer)localObject5).append(((View)localObject4).getName().statementName).append(' ').append('(');
          n = ((View)localObject4).getColumnCount();
          for (i1 = 0; i1 < n; i1++)
          {
            ((StringBuffer)localObject5).append(((View)localObject4).getColumn(i1).columnName.statementName);
            if (i1 >= n - 1)
              continue;
            ((StringBuffer)localObject5).append(',');
          }
          ((StringBuffer)localObject5).append(')').append(' ').append("AS").append(' ');
          ((StringBuffer)localObject5).append(((View)localObject4).getStatement());
          addRow(paramResult, ((StringBuffer)localObject5).toString());
        }
        j++;
      }
    }
  }

  static String getIdentityUpdateDDL(Table paramTable)
  {
    if (paramTable.identityColumn == -1)
      return "";
    String str1 = paramTable.getName().statementName;
    String str2 = paramTable.getColumn(paramTable.identityColumn).columnName.statementName;
    long l = paramTable.identitySequence.peek();
    StringBuffer localStringBuffer = new StringBuffer(128);
    localStringBuffer.append("ALTER").append(' ').append("TABLE").append(' ').append(str1).append(' ').append("ALTER").append(' ').append("COLUMN").append(' ').append(str2).append(' ').append("RESTART").append(' ').append("WITH").append(' ').append(l);
    return localStringBuffer.toString();
  }

  static String getIndexRootsDDL(Table paramTable)
  {
    StringBuffer localStringBuffer = new StringBuffer(128);
    localStringBuffer.append("SET").append(' ').append("TABLE").append(' ');
    localStringBuffer.append(paramTable.getName().statementName);
    localStringBuffer.append(' ').append("INDEX").append('\'');
    localStringBuffer.append(paramTable.getIndexRoots());
    localStringBuffer.append('\'');
    return localStringBuffer.toString();
  }

  static String getSchemaCreateDDL(Database paramDatabase, HsqlNameManager.HsqlName paramHsqlName)
  {
    StringBuffer localStringBuffer = new StringBuffer(128);
    localStringBuffer.append("CREATE").append(' ');
    localStringBuffer.append("SCHEMA").append(' ');
    localStringBuffer.append(paramHsqlName.statementName).append(' ');
    localStringBuffer.append("AUTHORIZATION").append(' ');
    localStringBuffer.append("DBA");
    return localStringBuffer.toString();
  }

  static void getTableDDL(Database paramDatabase, Table paramTable, int paramInt, HsqlArrayList paramHsqlArrayList, boolean paramBoolean, StringBuffer paramStringBuffer)
  {
    paramStringBuffer.append("CREATE").append(' ');
    if (paramTable.isTemp)
    {
      paramStringBuffer.append("GLOBAL").append(' ');
      paramStringBuffer.append("TEMPORARY").append(' ');
    }
    if (paramTable.isText())
      paramStringBuffer.append("TEXT").append(' ');
    else if (paramTable.isCached())
      paramStringBuffer.append("CACHED").append(' ');
    else
      paramStringBuffer.append("MEMORY").append(' ');
    paramStringBuffer.append("TABLE").append(' ');
    if (paramBoolean)
      paramStringBuffer.append(paramTable.getName().schema.statementName).append('.');
    paramStringBuffer.append(paramTable.getName().statementName);
    paramStringBuffer.append('(');
    int i = paramTable.getColumnCount();
    int[] arrayOfInt1 = paramTable.getPrimaryKey();
    HsqlNameManager.HsqlName localHsqlName = null;
    Constraint localConstraint = paramTable.getPrimaryConstraint();
    if ((localConstraint != null) && (!localConstraint.getName().isReservedName()))
      localHsqlName = localConstraint.getName();
    Object localObject1;
    Object localObject2;
    for (int j = 0; j < i; j++)
    {
      Column localColumn = paramTable.getColumn(j);
      String str = localColumn.columnName.statementName;
      paramStringBuffer.append(str);
      paramStringBuffer.append(' ');
      localObject1 = Types.getTypeString(localColumn.getType());
      paramStringBuffer.append((String)localObject1);
      int n = 0;
      if (localColumn.getType() == 93)
      {
        if (localColumn.getSize() != 6)
          n = 1;
      }
      else
        n = localColumn.getSize() > 0 ? 1 : 0;
      if (n != 0)
      {
        paramStringBuffer.append('(');
        paramStringBuffer.append(localColumn.getSize());
        if (localColumn.getScale() > 0)
        {
          paramStringBuffer.append(',');
          paramStringBuffer.append(localColumn.getScale());
        }
        paramStringBuffer.append(')');
      }
      localObject2 = localColumn.getDefaultDDL();
      if (localObject2 != null)
      {
        paramStringBuffer.append(' ').append("DEFAULT").append(' ');
        paramStringBuffer.append((String)localObject2);
      }
      if (j == paramTable.getIdentityColumn())
      {
        paramStringBuffer.append(" GENERATED BY DEFAULT AS IDENTITY(START WITH ");
        paramStringBuffer.append(localColumn.identityStart);
        if (localColumn.identityIncrement != 1L)
        {
          paramStringBuffer.append(",").append("INCREMENT").append(' ').append("BY").append(' ');
          paramStringBuffer.append(localColumn.identityIncrement);
        }
        paramStringBuffer.append(")");
      }
      if (!localColumn.isNullable())
        paramStringBuffer.append(' ').append("NOT").append(' ').append("NULL");
      if ((arrayOfInt1.length == 1) && (j == arrayOfInt1[0]) && (localHsqlName == null))
        paramStringBuffer.append(' ').append("PRIMARY").append(' ').append("KEY");
      if (j >= i - 1)
        continue;
      paramStringBuffer.append(',');
    }
    if ((arrayOfInt1.length > 1) || ((arrayOfInt1.length == 1) && (localHsqlName != null)))
    {
      paramStringBuffer.append(',');
      if (localHsqlName != null)
      {
        paramStringBuffer.append("CONSTRAINT").append(' ');
        paramStringBuffer.append(localHsqlName.statementName).append(' ');
      }
      paramStringBuffer.append("PRIMARY").append(' ').append("KEY");
      getColumnList(paramTable, arrayOfInt1, arrayOfInt1.length, paramStringBuffer);
    }
    Constraint[] arrayOfConstraint = paramTable.getConstraints();
    int k = 0;
    int m = arrayOfConstraint.length;
    while (k < m)
    {
      localObject1 = arrayOfConstraint[k];
      switch (((Constraint)localObject1).getType())
      {
      case 2:
        paramStringBuffer.append(',').append("CONSTRAINT").append(' ');
        paramStringBuffer.append(((Constraint)localObject1).getName().statementName);
        paramStringBuffer.append(' ').append("UNIQUE");
        int[] arrayOfInt2 = ((Constraint)localObject1).getMainColumns();
        getColumnList(((Constraint)localObject1).getMain(), arrayOfInt2, arrayOfInt2.length, paramStringBuffer);
        break;
      case 0:
        localObject2 = ((Constraint)localObject1).getMain();
        int i1 = paramDatabase.schemaManager.getTableIndex((Table)localObject2);
        if (i1 > paramInt)
        {
          paramHsqlArrayList.add(localObject1);
        }
        else
        {
          paramStringBuffer.append(',');
          getFKStatement((Constraint)localObject1, paramStringBuffer);
        }
        break;
      case 3:
        try
        {
          paramStringBuffer.append(',').append("CONSTRAINT").append(' ');
          paramStringBuffer.append(((Constraint)localObject1).getName().statementName);
          paramStringBuffer.append(' ').append("CHECK").append('(');
          paramStringBuffer.append(((Constraint)localObject1).core.check.getDDL());
          paramStringBuffer.append(')');
        }
        catch (HsqlException localHsqlException)
        {
        }
      case 1:
      }
      k++;
    }
    paramStringBuffer.append(')');
    if (paramTable.onCommitPreserve)
    {
      paramStringBuffer.append(' ').append("ON").append(' ');
      paramStringBuffer.append("COMMIT").append(' ').append("PRESERVE");
      paramStringBuffer.append(' ').append("ROWS");
    }
  }

  static String getDataSource(Table paramTable)
  {
    String str = paramTable.getDataSource();
    if (str == null)
      return null;
    boolean bool = paramTable.isDescDataSource();
    StringBuffer localStringBuffer = new StringBuffer(128);
    localStringBuffer.append("SET").append(' ').append("TABLE").append(' ');
    localStringBuffer.append(paramTable.getName().statementName);
    localStringBuffer.append(' ').append("SOURCE").append(' ').append('"');
    localStringBuffer.append(str);
    localStringBuffer.append('"');
    if (bool)
      localStringBuffer.append(' ').append("DESC");
    return localStringBuffer.toString();
  }

  static String getDataSourceHeader(Table paramTable)
  {
    String str = paramTable.getHeader();
    if (str == null)
      return null;
    StringBuffer localStringBuffer = new StringBuffer(128);
    localStringBuffer.append("SET").append(' ').append("TABLE").append(' ');
    localStringBuffer.append(paramTable.getName().statementName);
    localStringBuffer.append(' ').append("SOURCE").append(' ');
    localStringBuffer.append("HEADER").append(' ');
    localStringBuffer.append(str);
    return localStringBuffer.toString();
  }

  private static void getColumnList(Table paramTable, int[] paramArrayOfInt, int paramInt, StringBuffer paramStringBuffer)
  {
    paramStringBuffer.append('(');
    for (int i = 0; i < paramInt; i++)
    {
      paramStringBuffer.append(paramTable.getColumn(paramArrayOfInt[i]).columnName.statementName);
      if (i >= paramInt - 1)
        continue;
      paramStringBuffer.append(',');
    }
    paramStringBuffer.append(')');
  }

  private static void getFKStatement(Constraint paramConstraint, StringBuffer paramStringBuffer)
  {
    paramStringBuffer.append("CONSTRAINT").append(' ');
    paramStringBuffer.append(paramConstraint.getName().statementName);
    paramStringBuffer.append(' ').append("FOREIGN").append(' ').append("KEY");
    int[] arrayOfInt = paramConstraint.getRefColumns();
    getColumnList(paramConstraint.getRef(), arrayOfInt, arrayOfInt.length, paramStringBuffer);
    paramStringBuffer.append(' ').append("REFERENCES").append(' ');
    paramStringBuffer.append(paramConstraint.getMain().getName().statementName);
    arrayOfInt = paramConstraint.getMainColumns();
    getColumnList(paramConstraint.getMain(), arrayOfInt, arrayOfInt.length, paramStringBuffer);
    if (paramConstraint.getDeleteAction() != 3)
    {
      paramStringBuffer.append(' ').append("ON").append(' ').append("DELETE").append(' ');
      paramStringBuffer.append(getFKAction(paramConstraint.getDeleteAction()));
    }
    if (paramConstraint.getUpdateAction() != 3)
    {
      paramStringBuffer.append(' ').append("ON").append(' ').append("UPDATE").append(' ');
      paramStringBuffer.append(getFKAction(paramConstraint.getUpdateAction()));
    }
  }

  private static String getFKAction(int paramInt)
  {
    switch (paramInt)
    {
    case 0:
      return "CASCADE";
    case 4:
      return "SET DEFAULT";
    case 2:
      return "SET NULL";
    case 1:
    case 3:
    }
    return "NO ACTION";
  }

  private static void addRow(Result paramResult, String paramString)
  {
    if ((paramString == null) || (paramString.length() == 0))
      return;
    String[] arrayOfString = new String[1];
    arrayOfString[0] = paramString;
    paramResult.add(arrayOfString);
  }

  private static void addRightsStatements(Database paramDatabase, Result paramResult)
  {
    HashMappedList localHashMappedList = paramDatabase.getUserManager().getUsers();
    Iterator localIterator1 = localHashMappedList.values().iterator();
    GranteeManager localGranteeManager = paramDatabase.getGranteeManager();
    Iterator localIterator2 = localGranteeManager.getGrantees().iterator();
    Object localObject1;
    String str1;
    while (localIterator1.hasNext())
    {
      localObject1 = (User)localIterator1.next();
      str1 = ((User)localObject1).getName();
      if (str1.equals("PUBLIC"))
        continue;
      addRow(paramResult, ((User)localObject1).getCreateUserDDL());
    }
    while (localIterator2.hasNext())
    {
      localObject1 = (Grantee)localIterator2.next();
      str1 = ((Grantee)localObject1).getName();
      if ((str1.equals("_SYSTEM")) || (str1.equals("DBA")))
        continue;
      String str2 = ((Grantee)localObject1).allRolesString();
      if (str2 != null)
        addRow(paramResult, "GRANT " + str2 + " TO " + str1);
      IntValueHashMap localIntValueHashMap = ((Grantee)localObject1).getRights();
      if (localIntValueHashMap == null)
        continue;
      Iterator localIterator3 = localIntValueHashMap.keySet().iterator();
      while (localIterator3.hasNext())
      {
        Object localObject2 = localIterator3.next();
        int i = localIntValueHashMap.get(localObject2, 0);
        StringBuffer localStringBuffer = new StringBuffer(64);
        localStringBuffer.append("GRANT").append(' ');
        localStringBuffer.append(GranteeManager.getRightsList(i));
        localStringBuffer.append(' ').append("ON").append(' ');
        if ((localObject2 instanceof String))
        {
          if ((localObject2.equals("java.lang.Math")) || (localObject2.equals("org.hsqldb.Library")))
            continue;
          localStringBuffer.append("CLASS \"");
          localStringBuffer.append((String)localObject2);
          localStringBuffer.append('"');
        }
        else
        {
          HsqlNameManager.HsqlName localHsqlName = (HsqlNameManager.HsqlName)localObject2;
          Table localTable = paramDatabase.schemaManager.findUserTable(null, localHsqlName.name, localHsqlName.schema.name);
          if (localTable == null)
            continue;
          localStringBuffer.append(localHsqlName.schema.statementName).append('.').append(localHsqlName.statementName);
        }
        localStringBuffer.append(' ').append("TO").append(' ');
        localStringBuffer.append(((Grantee)localObject1).getName());
        addRow(paramResult, localStringBuffer.toString());
      }
    }
  }
}

/* Location:           /home/mnovotny/projects/EMBEDDED_JBOSS_BETA3_COMMUNITY/embedded/output/lib/embedded-jboss/lib/thirdparty-all.jar
* Qualified Name:     org.hsqldb.DatabaseScript
* JD-Core Version:    0.6.0
*/
TOP

Related Classes of org.hsqldb.DatabaseScript

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.