📄 xmlsqlparser.java
字号:
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 + -