1.1 --- a/PLSQL/Completion/src/org/netbeans/modules/plsql/completion/PlsqlContext.java Tue May 15 16:09:36 2012 +0200
1.2 +++ b/PLSQL/Completion/src/org/netbeans/modules/plsql/completion/PlsqlContext.java Thu May 17 16:25:31 2012 +0530
1.3 @@ -209,12 +209,15 @@
1.4 lParenCount++;
1.5 previousKeyWordTokenId = null;
1.6 }
1.7 - } else if(tokenId == PlsqlTokenId.KEYWORD) {
1.8 + } else if(tokenId == PlsqlTokenId.KEYWORD || "SET".equalsIgnoreCase(value)) {
1.9 if(rParenCount==0) {
1.10 if("WHERE".equalsIgnoreCase(value) || "BY".equalsIgnoreCase(value)) {
1.11 //set for where as well as order by and group by
1.12 whereFound = true;
1.13 } else if("SET".equalsIgnoreCase(value)) {
1.14 + if(whereFound){
1.15 + return ts.offset()+5;
1.16 + }
1.17 setFound = true;
1.18 } else if("FROM".equalsIgnoreCase(value)) {
1.19 if(whereFound)
1.20 @@ -274,22 +277,27 @@
1.21 }
1.22
1.23 private HashMap<String, String> extractAliases(TokenSequence<PlsqlTokenId> ts) {
1.24 - //start at the first point after the FROM statement
1.25 - //extract list of tables/views and aliases.
1.26 HashMap<String, String> map = new HashMap<String, String>();
1.27 int parenCount = 0;
1.28 String viewName = null;
1.29 String alias = null;
1.30 final String SELECT_STATEMENT="select...";
1.31 + if(isUpdateStmt(ts.offset())){
1.32 + ts.moveIndex(1);
1.33 + }
1.34 while (ts.moveNext()) {
1.35 Token<PlsqlTokenId> token = ts.token();
1.36 PlsqlTokenId tokenID = token.id();
1.37 String value = token.toString();
1.38 - if(tokenID == PlsqlTokenId.OPERATOR && ";".equals(value)) {
1.39 - break;
1.40 + if(tokenID == PlsqlTokenId.OPERATOR && (";".equals(value) || "=".equals(value))) {
1.41 + if("=".equals(value))
1.42 + viewName = null;
1.43 + else
1.44 + break;
1.45 } else if(tokenID == PlsqlTokenId.DOT && viewName!=null) {
1.46 //schema prefix for the object - ignore the schema
1.47 - viewName = null;
1.48 + if(!isInsertStmt(ts.offset()))
1.49 + viewName = null;
1.50 } else if(tokenID == PlsqlTokenId.LPAREN) {
1.51 parenCount++;
1.52 } else if(tokenID == PlsqlTokenId.RPAREN) {
1.53 @@ -298,6 +306,8 @@
1.54 parenCount--;
1.55 if(parenCount==0 && viewName==null) //closing parenthesis. If viewName != null this is probably an insert into statement...
1.56 viewName = SELECT_STATEMENT;
1.57 + else
1.58 + break;
1.59 } else if(parenCount==0) {
1.60 if(tokenID == PlsqlTokenId.IDENTIFIER || tokenID==PlsqlTokenId.STRING_LITERAL) {
1.61 if(viewName==null) {
1.62 @@ -311,8 +321,8 @@
1.63 else if(viewName!=null && viewName!=SELECT_STATEMENT) //Yes - this should be "==..." and not equals(...)
1.64 selectViewsWithoutAlias.add(viewName);
1.65 viewName = alias = null;
1.66 - } else if(tokenID==PlsqlTokenId.KEYWORD) {
1.67 - break;
1.68 + } else if(tokenID==PlsqlTokenId.KEYWORD || "SET".equals(value)) {
1.69 + break;
1.70 }
1.71 }
1.72 }
1.73 @@ -330,6 +340,22 @@
1.74 ts.move(caretOffset);
1.75 return findStmtStart(ts, "SELECT")>-1;
1.76 }
1.77 +
1.78 + private boolean isUpdateStmt(int caretOffset) {
1.79 + TokenHierarchy tokenHierarchy = TokenHierarchy.get(doc);
1.80 + @SuppressWarnings("unchecked")
1.81 + TokenSequence<PlsqlTokenId> ts = tokenHierarchy.tokenSequence(PlsqlTokenId.language());
1.82 + ts.move(caretOffset);
1.83 + return findStmtStart(ts, "UPDATE")>-1;
1.84 + }
1.85 +
1.86 + private boolean isInsertStmt(int caretOffset) {
1.87 + TokenHierarchy tokenHierarchy = TokenHierarchy.get(doc);
1.88 + @SuppressWarnings("unchecked")
1.89 + TokenSequence<PlsqlTokenId> ts = tokenHierarchy.tokenSequence(PlsqlTokenId.language());
1.90 + ts.move(caretOffset);
1.91 + return findStmtStart(ts, "INSERT")>-1;
1.92 + }
1.93
1.94 private boolean isExceptionStmt(int caretOffset) {
1.95 //for now just return true...