in HSQL/src/org/hsqldb1/util/TransferSQLText.java [698:864]
TransferResultSet parseFileForData(String tableName)
throws DataAccessPointException {
TransferResultSet trsData = new TransferResultSet();
StringTokenizer Tokenizer;
if (WTextRead == null) {
try {
WTextRead = new BufferedReader(new FileReader(sFileName));
} catch (IOException e) {
throw new DataAccessPointException(e.getMessage());
}
}
String currentLine = "";
String Token;
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")) {
continue;
}
try {
if (!Tokenizer.nextToken().toUpperCase().equals("INTO")) {
throw new DataAccessPointException(
"Error in INSERT statement: no INTO found");
}
Token = Tokenizer.nextToken();
if (!Token.equals(tableName)) {
continue;
}
int iParsedRows = 0;
Vector vColumnNames = new Vector();
Vector vColumnValues = new Vector();
Vector vColumnTypes = new Vector();
while ((currentLine = WTextRead.readLine()) != null) {
currentLine = currentLine.trim();
boolean newLine = (currentLine.length() == 0);
if (newLine) {
int iColumnNb = 0;
iParsedRows++;
iColumnNb = vColumnNames.size();
String[] Names = new String[iColumnNb + 1];
int[] Types = new int[iColumnNb + 1];
Object[] Values = new Object[iColumnNb + 1];
for (int Idx = 0; Idx < iColumnNb; Idx++) {
Names[Idx + 1] =
(String) vColumnNames.elementAt(Idx);
Types[Idx + 1] =
((Integer) vColumnTypes.elementAt(
Idx)).intValue();
Values[Idx + 1] =
vColumnValues.elementAt(Idx);
}
try {
trsData.addRow(Names, Types, Values,
iColumnNb);
} catch (Exception e) {
throw new DataAccessPointException(
e.getMessage());
}
iColumnNb = 0;
vColumnNames.removeAllElements();
vColumnValues.removeAllElements();
vColumnTypes.removeAllElements();
continue;
}
Tokenizer = new StringTokenizer(currentLine);
Token = Tokenizer.nextToken("=");
if (Token.equals("Number of Rows")) {
int iNbRows =
Integer.parseInt(Tokenizer.nextToken());
if (iNbRows != iParsedRows) {
throw new DataAccessPointException(
"Number of parsed rows (" + iParsedRows
+ ") is different from the expected ("
+ iNbRows + ")");
}
return trsData;
}
if (Token.equals("column")) {
Token = Tokenizer.nextToken(" =");
vColumnNames.addElement(Token);
}
Token = Tokenizer.nextToken(" =");
if (Token.equals("datatype")) {
int iType;
Token = Tokenizer.nextToken(" =");
try {
iType = JDBCT.toInt(Token.toUpperCase());
} catch (Exception e) {
throw new DataAccessPointException(
"Unknown type: " + Token);
}
vColumnTypes.addElement(new Integer(iType));
}
Token = Tokenizer.nextToken(" =");
if (Token.equals("value")) {
int iStart = currentLine.indexOf("value=") + 6;
String sValue =
currentLine.substring(iStart).trim();
if (sValue.indexOf("<null>") >= 0) {
vColumnValues.addElement(null);
} else {
int i = sValue.indexOf('\'') + 1;
String sbToken = sValue.substring(i);
i = sbToken.lastIndexOf('\'');
sbToken = sbToken.substring(0, i);
Token = sbToken;
vColumnValues.addElement(Token);
}
}
}
} catch (IndexOutOfBoundsException IOBe) {
continue;
}
}
} catch (IOException IOe) {
throw new DataAccessPointException(IOe.getMessage());
}
return trsData;
}