Skip to content

Commit 55f20e0

Browse files
committed
1 parent 275522f commit 55f20e0

File tree

2 files changed

+43
-17
lines changed

2 files changed

+43
-17
lines changed

src/main/java/net/sf/jsqlparser/parser/SimpleCharStream.java

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public class SimpleCharStream {
3333
protected boolean prevCharIsLF = false;
3434

3535
protected Provider inputStream;
36+
private boolean externalBuffer;
3637

3738
protected char[] buffer;
3839
protected int maxNextCharInd = 0;
@@ -97,7 +98,7 @@ protected void ExpandBuff(boolean wrapAround) {
9798
}
9899

99100
protected void FillBuff() throws java.io.IOException {
100-
if (maxNextCharInd == available) {
101+
if (!externalBuffer && maxNextCharInd == available) {
101102
if (available == bufsize) {
102103
if (tokenBegin > 2048) {
103104
bufpos = maxNextCharInd = 0;
@@ -287,13 +288,21 @@ public void backup(int amount) {
287288
public SimpleCharStream(Provider dstream, int startline,
288289
int startcolumn, int buffersize) {
289290
inputStream = dstream;
291+
externalBuffer = dstream instanceof StringProvider;
290292
line = startline;
291293
column = startcolumn - 1;
292294

293-
available = bufsize = buffersize;
294-
buffer = new char[buffersize];
295-
bufline = new int[buffersize];
296-
bufcolumn = new int[buffersize];
295+
if (externalBuffer) {
296+
int bs = ((StringProvider) inputStream)._string.length();
297+
available = bufsize = bs;
298+
bufline = new int[bs];
299+
bufcolumn = new int[bs];
300+
} else {
301+
available = bufsize = buffersize;
302+
buffer = new char[buffersize];
303+
bufline = new int[buffersize];
304+
bufcolumn = new int[buffersize];
305+
}
297306
}
298307

299308
/**
@@ -317,14 +326,21 @@ public SimpleCharStream(Provider dstream) {
317326
public void ReInit(Provider dstream, int startline,
318327
int startcolumn, int buffersize) {
319328
inputStream = dstream;
329+
externalBuffer = dstream instanceof StringProvider;
320330
line = startline;
321331
column = startcolumn - 1;
322-
323-
if (buffer == null || buffersize != buffer.length) {
324-
available = bufsize = buffersize;
325-
buffer = new char[buffersize];
326-
bufline = new int[buffersize];
327-
bufcolumn = new int[buffersize];
332+
if (externalBuffer) {
333+
int bs = ((StringProvider) inputStream)._string.length();
334+
available = bufsize = bs;
335+
bufline = new int[bs];
336+
bufcolumn = new int[bs];
337+
} else {
338+
if (buffer == null || buffersize != buffer.length) {
339+
available = bufsize = buffersize;
340+
buffer = new char[buffersize];
341+
bufline = new int[buffersize];
342+
bufcolumn = new int[buffersize];
343+
}
328344
}
329345
prevCharIsLF = prevCharIsCR = false;
330346
tokenBegin = inBuf = maxNextCharInd = 0;
@@ -350,18 +366,29 @@ public void ReInit(Provider dstream) {
350366
* Get token literal value.
351367
*/
352368
public String GetImage() {
353-
if (bufpos >= tokenBegin) {
354-
return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
369+
if (externalBuffer) {
370+
String data = ((StringProvider) inputStream)._string;
371+
if (bufpos >= tokenBegin) {
372+
return data.substring(tokenBegin, bufpos + 1);
373+
} else {
374+
return data.substring(tokenBegin, bufsize)
375+
+ data.substring(0, bufpos + 1);
376+
}
355377
} else {
356-
return new String(buffer, tokenBegin, bufsize - tokenBegin)
357-
+ new String(buffer, 0, bufpos + 1);
378+
if (bufpos >= tokenBegin) {
379+
return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
380+
} else {
381+
return new String(buffer, tokenBegin, bufsize - tokenBegin)
382+
+ new String(buffer, 0, bufpos + 1);
383+
}
358384
}
359385
}
360386

361387
/**
362388
* Get the suffix.
363389
*/
364390
public char[] GetSuffix(int len) {
391+
365392
char[] ret = new char[len];
366393

367394
if ((bufpos + 1) >= len) {

src/test/java/net/sf/jsqlparser/test/TestUtils.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
*/
1010
package net.sf.jsqlparser.test;
1111

12-
import java.io.StringReader;
1312
import java.util.regex.Pattern;
1413
import net.sf.jsqlparser.JSQLParserException;
1514
import net.sf.jsqlparser.expression.Expression;
@@ -49,7 +48,7 @@ public static void assertSqlCanBeParsedAndDeparsed(String statement) throws JSQL
4948
* @throws JSQLParserException
5049
*/
5150
public static void assertSqlCanBeParsedAndDeparsed(String statement, boolean laxDeparsingCheck) throws JSQLParserException {
52-
Statement parsed = CCJSqlParserUtil.parse(new StringReader(statement));
51+
Statement parsed = CCJSqlParserUtil.parse(statement);
5352
assertStatementCanBeDeparsedAs(parsed, statement, laxDeparsingCheck);
5453
}
5554

0 commit comments

Comments
 (0)