我正在编写一个非常小的SQL编辑器,主要是为了新奇。 我现在能够执行所有语句,只需用分号分割整个文本,然后在另一个语句后面运行一个语句。
但是,我希望实现一个功能,我只运行最接近光标的语句,但我很难知道如何执行此操作。
我一直在看BreakIterator
这似乎有用,但它并没有真正帮助我得到我需要的陈述。
这些是我需要支持的案例: 光标位于|
SELECT * FROM something;|
光标放在分号后面SELECT * FROM so|mething;
光标置于语句SELECT * FROM something\nLEFT |JOIN foo USING (bar);
语句跨越多行,同样将光标放在分号后面或语句中。为此提供简单解决方案的任何想法?
答案 0 :(得分:1)
我认为你想要的逻辑是运行游标范围内的所有语句。
通过"光标范围"我的意思是:所有在前一个分号到下一个分号之间,从光标位置的行开始(如果光标在分号后面 - 转到行的开头并应用此逻辑)
答案 1 :(得分:1)
你可以试试这个:
// assuming the editorText is the contents of the edit window
String[] statements = editorText.split(";");
int statementCharactersProcessed = 0;
// assuming caret is at position caretIndex
int statementIndex = 0;
String statement;
while (caretIndex>statementCharactersProcessed+1) {
// re-add the missing ;
statement = statements[statementIndex++] + ";";
statementCharactersProcessed += statement.length;
}
// statement should now be the value you're looking for
答案 2 :(得分:0)
我知道要实现它,但我可以建议你,如果你可以检查光标位置之前和之后的分号。并执行落在这些分号之间的语句应该对我有所帮助。
:)