⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlsqlparser.java

📁 数据仓库工具
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
      else
        tableName = sql.substring( fromPos + 6, wherePos ).trim().toUpperCase();
      String columnNamesSql = sql.substring( 0, fromPos );
      if ( columnNamesSql.indexOf( "*" ) == -1 ) {
        Vector cols = new Vector();
        StringTokenizer tokenizer = new StringTokenizer( upperSql.substring( 7,
            fromPos ), "," );

        while ( tokenizer.hasMoreTokens() ) {
          cols.add( tokenizer.nextToken().trim() );
        }

        columnNames = new String[cols.size()];
        cols.copyInto( columnNames );
      }
      else {
        columnNames = ( String[] ) ( new XmlWriter( this.fileName,
            this.isAutoCommit ).getTableProperties( this.tableName ).get( 0 ) );
      }
      if ( wherePos != -1 ) {
        String strWhere = sql.substring( wherePos + 7 );
        Vector whereCols = new Vector();
        Vector whereValues = new Vector();
        String strToken = strWhere;
        if ( strToken.toUpperCase().indexOf( " AND " ) != -1 ) {
          String temp = strToken;
          int andPos = 0;
          out:
          do {
            andPos = temp.toUpperCase().indexOf( " AND " );
            String strTokenAdd;
            if ( andPos != -1 )
              strTokenAdd = temp.substring( 0, andPos ).trim();
            else
              strTokenAdd = temp.trim();
            int delimiter2 = strTokenAdd.indexOf( "=" );
            if ( delimiter2 != -1 ) {
              String valueAdd = strTokenAdd.substring( delimiter2 + 1 ).trim();
              valueAdd = Utils.handleQuotedString(valueAdd);
              whereCols.add( strTokenAdd.substring( 0, delimiter2 ).trim().
                             toUpperCase() );
              valueAdd = Utils.replaceAll( valueAdd, commaEscape, "," );
              valueAdd = Utils.replaceAll( valueAdd, quoteEscape, "'" );
              valueAdd = Utils.replaceKeywordsBack(valueAdd, oldValues);
              whereValues.add( valueAdd );
            }
            else {
              int delimiter3 = strTokenAdd.toLowerCase().indexOf( " is " );
              whereCols.add( strTokenAdd.substring( 0, delimiter3 ).trim().
                             toUpperCase() );
              whereValues.add( null );
            }
            temp = temp.substring( andPos + 5 );
            if ( temp.toUpperCase().indexOf( " AND " ) == -1 ) {
              strTokenAdd = temp.trim();
              int delimiter4 = strTokenAdd.indexOf( "=" );
              if ( delimiter4 != -1 ) {
                String valueAdd = strTokenAdd.substring( delimiter4 + 1 ).trim();
                valueAdd = Utils.handleQuotedString(valueAdd);
                whereCols.add( strTokenAdd.substring( 0, delimiter4 ).trim().toUpperCase() );
                valueAdd = Utils.replaceAll( valueAdd, commaEscape, "," );
                valueAdd = Utils.replaceAll( valueAdd, quoteEscape, "'" );
                valueAdd = Utils.replaceKeywordsBack(valueAdd, oldValues);
                whereValues.add( valueAdd );
              }
              else {
                int delimiter3 = strTokenAdd.toLowerCase().indexOf( " is " );
                whereCols.add( strTokenAdd.substring( 0, delimiter3 ).trim().
                               toUpperCase() );
                whereValues.add( null );
              }
              break out;
            }

          }
          while ( true );

        }
        else {
          int delimiter = strToken.indexOf( "=" );
          if ( delimiter != -1 ) {
            String value = strToken.substring( delimiter + 1 ).trim();
            value = Utils.handleQuotedString(value);
            whereCols.add( strToken.substring( 0, delimiter ).trim().toUpperCase() );
            value = Utils.replaceAll( value, commaEscape, "," );
            value = Utils.replaceAll( value, quoteEscape, "'" );
            value = Utils.replaceKeywordsBack(value, oldValues);
            whereValues.add( value );
          }
          else {
            int delimiter1 = strToken.toLowerCase().indexOf( " is " );
            whereCols.add( strToken.substring( 0, delimiter1 ).trim().
                           toUpperCase() );
            whereValues.add( null );
          }
        }

        columnWhereNames = new String[whereCols.size()];
        columnWhereValues = new String[whereValues.size()];
        whereCols.copyInto( columnWhereNames );
        whereValues.copyInto( columnWhereValues );
      }
    }

//INSERT
    else if ( upperSql.startsWith( "INSERT " ) ) {
      if ( upperSql.lastIndexOf( " VALUES" ) == -1 ) {
        throw new Exception( "Malformed SQL. Missing VALUES statement." );
      }
      sqlType = INSERT;
      int intoPos = 0;
      if ( upperSql.indexOf( " INTO " ) != -1 )
        intoPos = upperSql.indexOf( " INTO " ) + 6;
      else
        intoPos = upperSql.indexOf( "INSERT " ) + 7;
      int bracketPos = upperSql.indexOf( "(" );
      int lastBracketPos = upperSql.indexOf( ")" );
      tableName = sql.substring( intoPos, bracketPos ).trim().toUpperCase();
      Vector cols = new Vector();
      StringTokenizer tokenizer = new StringTokenizer( upperSql.substring(
          bracketPos + 1, lastBracketPos ), "," );
      while ( tokenizer.hasMoreTokens() ) {
        cols.add( tokenizer.nextToken().trim() );
      }
      columnNames = new String[cols.size()];
      cols.copyInto( columnNames );

      int valuesPos = upperSql.indexOf( "VALUES" );
      String endStatement = sql.substring( valuesPos + 6 ).trim();
      bracketPos = endStatement.indexOf( "(" );
      lastBracketPos = endStatement.lastIndexOf( ")" );
      Vector values = new Vector();

      StringTokenizer tokenizer2 = new StringTokenizer( endStatement.substring(
          bracketPos + 1, lastBracketPos ), "," );
      while ( tokenizer2.hasMoreTokens() ) {
        String value = tokenizer2.nextToken().trim();
          value = Utils.handleQuotedString( value );
        value = Utils.replaceAll( value, commaEscape, "," );
        value = Utils.replaceAll( value, quoteEscape, "'" );
        value = Utils.replaceKeywordsBack(value, oldValues);
        value = Utils.handleBinaryString(value, this.binaryStreamObjectList);
        values.add( value );
        }

      columnValues = new String[values.size()];
      values.copyInto( columnValues );
    }

//UPDATE
    else if ( upperSql.startsWith( "UPDATE " ) ) {
      if ( upperSql.lastIndexOf( " SET " ) == -1 )
        throw new Exception( "Malformed SQL. Missing SET statement." );
      sqlType = UPDATE;
      int updatePos = upperSql.indexOf( "UPDATE" );
      int setPos = upperSql.indexOf( " SET " );
      int equalPos = upperSql.indexOf( "=" );
      int wherePos = upperSql.indexOf( " WHERE " );
      tableName = sql.substring( updatePos + 6, setPos ).trim().toUpperCase();
      String setString = "";
      //to handle situation when no where clause in sql statement
      if ( wherePos != -1 ) {
        setString = sql.substring( setPos + 5, wherePos );
      }
      else {
        setString = sql.substring( setPos + 5 );
      }

      StringTokenizer tokenizerSet = new StringTokenizer( setString, "," );
      Vector setNames = new Vector();
      Vector setValues = new Vector();

      while ( tokenizerSet.hasMoreTokens() ) {
        String strToken = tokenizerSet.nextToken();
        int delimiter = strToken.indexOf( "=" );
        setNames.add( strToken.substring( 0, delimiter ).trim().toUpperCase() );
        String value = strToken.substring( delimiter + 1 ).trim();
        value = Utils.handleQuotedString(value);
        value = Utils.replaceAll( value, commaEscape, "," );
        value = Utils.replaceAll( value, quoteEscape, "'" );
        value = Utils.replaceKeywordsBack(value, oldValues);
        value = Utils.handleBinaryString(value, this.binaryStreamObjectList);
        setValues.add( value );
      }
      columnNames = new String[setNames.size()];
      columnValues = new String[setValues.size()];
      setNames.copyInto( columnNames );
      setValues.copyInto( columnValues );

      if ( wherePos != -1 ) {
        String strWhere = sql.substring( wherePos + 6 ).trim();
        Vector whereCols = new Vector();
        Vector whereValues = new Vector();
        StringTokenizer tokenizerWhere = new StringTokenizer( strWhere, "," );

        while ( tokenizerWhere.hasMoreTokens() ) {
          String strToken = tokenizerWhere.nextToken();
          if ( strToken.toUpperCase().indexOf( " AND " ) != -1 ) {
            String temp = strToken;
            int andPos = 0;
            out:
            do {
              andPos = temp.toUpperCase().indexOf( " AND " );
              String strTokenAdd;
              if ( andPos != -1 )
                strTokenAdd = temp.substring( 0, andPos ).trim();
              else
                strTokenAdd = temp.trim();
              int delimiter2 = strTokenAdd.indexOf( "=" );
              if ( delimiter2 != -1 ) {
                String valueAdd = strTokenAdd.substring( delimiter2 + 1 ).trim();
                valueAdd = Utils.handleQuotedString(valueAdd);
                whereCols.add( strTokenAdd.substring( 0, delimiter2 ).trim().toUpperCase() );
                valueAdd = Utils.replaceAll( valueAdd, commaEscape, "," );
                valueAdd = Utils.replaceAll( valueAdd, quoteEscape, "'" );
                valueAdd = Utils.replaceKeywordsBack(valueAdd, oldValues);
                whereValues.add( valueAdd );
              }
              else {
                int delimiter3 = strTokenAdd.toLowerCase().indexOf( " is " );
                whereCols.add( strTokenAdd.substring( 0, delimiter3 ).trim().
                               toUpperCase() );
                whereValues.add( null );
              }
              temp = temp.substring( andPos + 5 );
              if ( temp.toUpperCase().indexOf( " AND " ) == -1 ) {
                strTokenAdd = temp.trim();
                int delimiter4 = strTokenAdd.indexOf( "=" );
                if ( delimiter4 != -1 ) {
                  String valueAdd = strTokenAdd.substring( delimiter4 + 1 ).
                      trim();
                  valueAdd = Utils.handleQuotedString(valueAdd);
                  whereCols.add( strTokenAdd.substring( 0, delimiter4 ).trim().toUpperCase() );
                  valueAdd = Utils.replaceAll( valueAdd, commaEscape, "," );
                  valueAdd = Utils.replaceAll( valueAdd, quoteEscape, "'" );
                  valueAdd = Utils.replaceKeywordsBack(valueAdd, oldValues);
                  whereValues.add( valueAdd );
                }
                else {
                  int delimiter3 = strTokenAdd.toLowerCase().indexOf( " is " );
                  whereCols.add( strTokenAdd.substring( 0, delimiter3 ).trim().
                                 toUpperCase() );
                  whereValues.add( null );
                }
                break out;
              }

            }
            while ( true );

          }
          else {
            int delimiter = strToken.indexOf( "=" );
            if ( delimiter != -1 ) {
              String value = strToken.substring( delimiter + 1 ).trim();
              value = Utils.handleQuotedString(value);
              whereCols.add( strToken.substring( 0, delimiter ).trim().toUpperCase() );
              value = Utils.replaceAll( value, commaEscape, "," );
              value = Utils.replaceAll( value, quoteEscape, "'" );
              value = Utils.replaceKeywordsBack(value, oldValues);
              whereValues.add( value );
            }
            else {
              int delimiter1 = strToken.toLowerCase().indexOf( " is " );
              whereCols.add( strToken.substring( 0, delimiter1 ).trim().toUpperCase() );
              whereValues.add( null );
            }
          }
        }
        columnWhereNames = new String[whereCols.size()];
        columnWhereValues = new String[whereValues.size()];
        whereCols.copyInto( columnWhereNames );
        whereValues.copyInto( columnWhereValues );
      }
    }

//CREATE TABLE
    else if ( upperSql.startsWith( "CREATE TABLE " ) ) {
      //removing line brakes
      sql = Utils.replaceAll( sql, "\n", "" );
      upperSql = sql.toUpperCase();
      sqlType = CREATE_TABLE;
      int createPos = upperSql.indexOf( "CREATE TABLE" );
      int tableStartPos = upperSql.indexOf( "(" );
      int tableEndPos = upperSql.lastIndexOf( ")" );

      tableName = sql.substring( createPos + 12, tableStartPos ).trim().
          toUpperCase();
      String createString = sql.substring( tableStartPos + 1, tableEndPos ).trim();
      ArrayList setColumnNames = new ArrayList();
      ArrayList setPrimaryKeys = new ArrayList();
      ArrayList setNotnullColumns = new ArrayList();
      String token = ( ( String ) upperSql.substring( tableStartPos + 1,tableEndPos ) ).trim();
      StringTokenizer comma = new StringTokenizer( token, "," );
      while ( comma.hasMoreTokens() ) {
        String nextComma = comma.nextToken().trim();
        StringTokenizer space = new StringTokenizer( nextComma, " " );
        String nextSpace = space.nextToken();
        setColumnNames.add( nextSpace );
        if ( nextComma.indexOf( "PRIMARYKEY" ) != -1 ) {
          setPrimaryKeys.add( nextSpace );
          setNotnullColumns.add( nextSpace );
        }
        if ( nextComma.indexOf( "NOT NULL" ) != -1 ) {
          setNotnullColumns.add( nextSpace );
        }
      }
      columnNames = new String[setColumnNames.size()];
      setColumnNames.toArray( columnNames );
      this.primaryKeyColumns = new String[setPrimaryKeys.size()];
      setPrimaryKeys.toArray( this.primaryKeyColumns );
      this.notnullColumns = new String[setNotnullColumns.size()];
      setNotnullColumns.toArray( this.notnullColumns );

    }
    else {
      throw new Exception( "Malformed SQL. Wrong SQL statement." );
    }
  }

  /**
   * Set setBinaryStreamList.
   * @param list
   */
  public void setBinaryStreamList( ArrayList list ) {
    this.binaryStreamObjectList = list;
  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -