void parseFileForTheRest()

in HSQL/src/org/hsqldb1/util/TransferSQLText.java [435:619]


    void parseFileForTheRest(TransferTable TTable,
                             DataAccessPoint Dest)
                             throws DataAccessPointException {

        StringTokenizer Tokenizer;

        StructureAlreadyParsed = true;

        if (WTextRead == null) {
            try {
                WTextRead = new BufferedReader(new FileReader(sFileName));
            } catch (IOException e) {
                throw new DataAccessPointException(e.getMessage());
            }
        }

        String        currentLine  = "";
        String        Token        = "";
        String        name         = "";
        TransferTable relatedTable = null;

        try {
            while ((currentLine = WTextRead.readLine()) != null) {
                currentLine = currentLine.trim() + ";";
                Tokenizer   = new StringTokenizer(currentLine);

                try {
                    Token = Tokenizer.nextToken();
                } catch (NoSuchElementException NSE) {
                    continue;
                }

                if (Token == null) {
                    continue;
                }

                if (Token.toUpperCase().equals("INSERT")) {
                    try {
                        if (!Tokenizer.nextToken().toUpperCase().equals(
                                "INTO")) {
                            throw new DataAccessPointException(
                                "Error in INSERT statement: no INTO found");
                        }

                        Token = Tokenizer.nextToken();

                        if ((relatedTable =
                                (TransferTable) DbStmts.get(Token)) != null) {
                            relatedTable.Stmts.bDelete     = true;
                            relatedTable.Stmts.bInsert     = true;
                            relatedTable.Stmts.sDestInsert = currentLine;
                            relatedTable.Stmts.sDestDelete =
                                "DELETE FROM "
                                + relatedTable.Stmts.sSourceTable + ";";
                        }

                        continue;
                    } catch (NoSuchElementException NSE) {
                        continue;
                    }
                } else if (Token.toUpperCase().equals("ALTER")) {
                    try {
                        if (!Tokenizer.nextToken().toUpperCase().equals(
                                "TABLE")) {
                            continue;
                        }

                        name  = Tokenizer.nextToken();
                        Token = Tokenizer.nextToken().toUpperCase();

                        if (!Token.equals("ADD")) {
                            continue;
                        }

                        do {
                            Token = Tokenizer.nextToken().toUpperCase();
                        } while (!Token.equals("CONSTRAINT"));

                        if ((relatedTable = (TransferTable) DbStmts.get(name))
                                != null) {
                            if (relatedTable.Stmts.sDestAlter == null) {
                                relatedTable.Stmts.sDestAlter = "";
                            }

                            relatedTable.Stmts.bAlter     = true;
                            relatedTable.Stmts.sDestAlter += currentLine;
                        } else {
                            throw new DataAccessPointException(
                                "table not found");
                        }

                        Token = Tokenizer.nextToken();

                        if (relatedTable.Stmts.sDestDrop == null) {
                            relatedTable.Stmts.sDestDrop = "";
                        }

                        relatedTable.Stmts.bDrop = true;
                        relatedTable.Stmts.sDestDrop =
                            "ALTER TABLE " + name + " DROP CONSTRAINT "
                            + Token + ";" + relatedTable.Stmts.sDestDrop;

                        continue;
                    } catch (NoSuchElementException NSE) {
                        continue;
                    }
                } else if (!Token.toUpperCase().equals("CREATE")) {
                    continue;
                }

                Token = Tokenizer.nextToken().toUpperCase();

                if (Token.equals("TABLE") || Token.equals("VIEW")) {
                    try {
                        name = Tokenizer.nextToken(" (;");

                        if (!DbStmts.containsKey(name)) {
                            throw new DataAccessPointException(
                                "error: index is created before the table");
                        }

                        relatedTable = (TransferTable) DbStmts.get(name);
                        relatedTable.Stmts.bCreate = true;
                        relatedTable.Stmts.bDrop   = true;

//                        relatedTable.Stmts.sDestCreate = currentLine;
                        relatedTable.Stmts.sDestCreate =
                            translateTypes(currentLine, TTable, Dest);
                        relatedTable.Stmts.sDestDrop =
                            "DROP " + relatedTable.Stmts.sType + " " + name
                            + ";";

                        DbStmts.put(relatedTable.Stmts.sSourceTable,
                                    relatedTable);
                    } catch (NoSuchElementException NSE) {
                        continue;
                    }
                }

                if (Token.equals("INDEX") || Token.equals("UNIQUE")) {
                    try {
                        while ((Token =
                                Tokenizer.nextToken()).toUpperCase().equals(
                                    "INDEX")) {
                            ;
                        }

                        String IndexdropCommand = "DROP INDEX " + Token
                                                  + " ;";

                        while ((Token = Tokenizer.nextToken(
                                " (")).toUpperCase().equals("ON")) {
                            ;
                        }

                        name = Token;

                        if (!DbStmts.containsKey(Token)) {
                            throw new DataAccessPointException(
                                "error: index is created before the table");
                        }

                        relatedTable = (TransferTable) DbStmts.get(Token);

                        if (relatedTable.Stmts.sDestCreateIndex == null) {
                            relatedTable.Stmts.sDestCreateIndex = "";
                        }

                        if (relatedTable.Stmts.sDestDropIndex == null) {
                            relatedTable.Stmts.sDestDropIndex = "";
                        }

                        relatedTable.Stmts.bCreateIndex     = true;
                        relatedTable.Stmts.bDropIndex       = true;
                        relatedTable.Stmts.sDestCreateIndex += currentLine;
                        relatedTable.Stmts.sDestDropIndex += IndexdropCommand;
                    } catch (NoSuchElementException NSE) {
                        continue;
                    }
                }
            }
        } catch (IOException IOe) {
            throw new DataAccessPointException(IOe.getMessage());
        }
    }