View Javadoc
1 package net.sourceforge.backpedal.kodo; 2 3 import net.mikehogan.veggie.exceptions.VeggieSystemException; 4 import net.sourceforge.backpedal.api.core.BackpedalFactory; 5 import net.sourceforge.backpedal.api.core.ParsedStatement; 6 import net.sourceforge.backpedal.api.core.StatementParser; 7 import net.sourceforge.backpedal.impl.AbstractComponent; 8 9 import java.util.ArrayList; 10 import java.util.Collection; 11 import java.util.Collections; 12 import java.util.StringTokenizer; 13 14 public class KodoStatementParser extends AbstractComponent implements StatementParser { 15 private final BackpedalFactory backpedalFactory; 16 17 public KodoStatementParser(BackpedalFactory backpedalFactory) { 18 this.backpedalFactory = backpedalFactory; 19 } 20 21 public ParsedStatement parseInsertStatement(final String statement) { 22 final StringTokenizer tokenizer = new StringTokenizer(statement, " (),"); 23 final Collection changedColumnNames = new ArrayList(); 24 final String mainKeyword = "INSERT"; 25 parse(mainKeyword, tokenizer); 26 parse("INTO", tokenizer); 27 final String tableName = tokenizer.nextToken(); 28 String token = tokenizer.nextToken(); 29 do { 30 changedColumnNames.add(token); 31 token = tokenizer.nextToken(); 32 } while (!"VALUES".equals(token)); 33 return createParsedStatement(statement, Collections.EMPTY_LIST, changedColumnNames, mainKeyword, tableName); 34 } 35 36 public ParsedStatement parseDeleteStatement(String sql) { 37 final StringTokenizer tokenizer = new StringTokenizer(sql, " (),=?"); 38 final Collection columnNames = new ArrayList(); 39 final String mainKeyword = "DELETE"; 40 parse(mainKeyword, tokenizer); 41 parse("FROM", tokenizer); 42 final String tableName = tokenizer.nextToken(); 43 parse("WHERE", tokenizer); 44 while (tokenizer.hasMoreTokens()) { 45 final String token = tokenizer.nextToken(); 46 if (!"AND".equals(token)) { 47 columnNames.add(token); 48 } 49 } 50 return createParsedStatement(sql, columnNames, Collections.EMPTY_LIST, mainKeyword, tableName); 51 } 52 53 private ParsedStatement createParsedStatement(final String originalSql, final Collection whereColumnNames, final Collection changedColumnNames, final String mainKeyword, final String tableName) { 54 String[] whereCols = new String[whereColumnNames.size()]; 55 whereCols = (String[]) whereColumnNames.toArray(whereCols); 56 String[] changedCols = new String[changedColumnNames.size()]; 57 changedCols = (String[]) changedColumnNames.toArray(changedCols); 58 return backpedalFactory.createParsedStatement(originalSql, mainKeyword, whereCols, changedCols, tableName); 59 } 60 61 private void parse(String expectedToken, StringTokenizer tokenizer) { 62 final String nextToken = tokenizer.nextToken(); 63 if (!expectedToken.equals(nextToken)) { 64 throw new VeggieSystemException("Expected token " + expectedToken + ", got " + nextToken); 65 } 66 } 67 68 public ParsedStatement parseUpdateStatement(String sql) { 69 final StringTokenizer tokenizer = new StringTokenizer(sql, " (),=?"); 70 final Collection whereColumnNames = new ArrayList(); 71 final Collection changedColumnNames = new ArrayList(); 72 final String mainKeyword = "UPDATE"; 73 parse(mainKeyword, tokenizer); 74 final String tableName = tokenizer.nextToken(); 75 parse("SET", tokenizer); 76 String token = tokenizer.nextToken(); 77 while (!"WHERE".equals(token)) { 78 changedColumnNames.add(token); 79 token = tokenizer.nextToken(); 80 } 81 while (tokenizer.hasMoreTokens()) { 82 token = tokenizer.nextToken(); 83 if (!"AND".equals(token)) { 84 whereColumnNames.add(token); 85 } 86 } 87 return createParsedStatement(sql, whereColumnNames, changedColumnNames, mainKeyword, tableName); 88 } 89 }

This page was automatically generated by Maven