1.1 --- a/PLSQL/Completion/src/org/netbeans/modules/plsql/completion/PlsqlContext.java Fri Jun 01 13:45:40 2012 +0530
1.2 +++ b/PLSQL/Completion/src/org/netbeans/modules/plsql/completion/PlsqlContext.java Fri Jun 01 16:26:22 2012 +0530
1.3 @@ -168,16 +168,21 @@
1.4 }
1.5
1.6 private int findNextFrom(TokenSequence<PlsqlTokenId> ts) {
1.7 + int parenCount = 0;
1.8 while (ts.moveNext()) {
1.9 Token<PlsqlTokenId> token = ts.token();
1.10 PlsqlTokenId tokenID = token.id();
1.11 String value = token.toString();
1.12 if(tokenID == PlsqlTokenId.OPERATOR && ";".equals(value)) {
1.13 return -1;
1.14 + }else if(tokenID == PlsqlTokenId.LPAREN) {
1.15 + parenCount++;
1.16 + } else if(tokenID == PlsqlTokenId.RPAREN) {
1.17 + parenCount--;
1.18 } else if (tokenID == PlsqlTokenId.KEYWORD) {
1.19 if("NULL".equalsIgnoreCase(value)) {
1.20 //ignore NULL since this is a valid SQL keyword
1.21 - } else if("FROM".equalsIgnoreCase(value)) {
1.22 + } else if(parenCount==0 && "FROM".equalsIgnoreCase(value)) {
1.23 return ts.offset()+5;
1.24 }
1.25 }
1.26 @@ -191,6 +196,7 @@
1.27 private int findTableAndViewListStartPosition(TokenSequence<PlsqlTokenId> ts) {
1.28 boolean whereFound = false;
1.29 boolean setFound = false;
1.30 + boolean asFound = false;
1.31 int rParenCount=0;
1.32 int lParenCount=0;
1.33 PlsqlTokenId previousKeyWordTokenId = null;
1.34 @@ -230,9 +236,12 @@
1.35 else
1.36 return -1; //found update before where or set...
1.37 } else if(lParenCount==1 && "INTO".equalsIgnoreCase(value)) { //find "INSERT INTO xxx (" type of statements
1.38 - if(previousKeyWordTokenId==null) //no other keywords between INTO and the parenthesis
1.39 + if(previousKeyWordTokenId==null || asFound) //no other keywords between INTO and the parenthesis
1.40 return ts.offset()+5;
1.41 + } else if("AS".equalsIgnoreCase(value)){
1.42 + asFound = true;
1.43 }
1.44 +
1.45 }
1.46 previousKeyWordTokenId = tokenId;
1.47 }
1.48 @@ -270,7 +279,10 @@
1.49 } else if (parenCount==0 && tokenID == PlsqlTokenId.KEYWORD) {
1.50 if(keyWord.equalsIgnoreCase(value)) {
1.51 return ts.offset();
1.52 - }
1.53 + }
1.54 + else if(value.equalsIgnoreCase("SELECT") || value.equalsIgnoreCase("UPDATE") || value.equalsIgnoreCase("INSERT") || value.equalsIgnoreCase("DELETE")){
1.55 + return -1;
1.56 + }
1.57 }
1.58 }
1.59 return -1;
1.60 @@ -283,7 +295,8 @@
1.61 String alias = null;
1.62 final String SELECT_STATEMENT="select...";
1.63 if(isUpdateStmt(ts.offset())){
1.64 - ts.moveIndex(1);
1.65 + ts.move(findStmtStart(ts, "UPDATE"));
1.66 + ts.moveIndex(ts.index()+1);
1.67 }
1.68 while (ts.moveNext()) {
1.69 Token<PlsqlTokenId> token = ts.token();
1.70 @@ -322,6 +335,7 @@
1.71 selectViewsWithoutAlias.add(viewName);
1.72 viewName = alias = null;
1.73 } else if(tokenID==PlsqlTokenId.KEYWORD || "SET".equals(value)) {
1.74 + if(!("AS".equalsIgnoreCase(value)))
1.75 break;
1.76 }
1.77 }