1.1 --- a/PLSQL/Formatter/src/org/netbeans/modules/plsql/format/PlsqlFormatter.java Mon Jan 30 09:29:43 2012 +0530
1.2 +++ b/PLSQL/Formatter/src/org/netbeans/modules/plsql/format/PlsqlFormatter.java Mon Jan 30 15:25:42 2012 +0530
1.3 @@ -996,6 +996,9 @@
1.4 }
1.5 }
1.6 }
1.7 + if (tokenImage.equalsIgnoreCase("DISTINCT")) {
1.8 + return getIndentForSelect(previousNWS);
1.9 + }
1.10 } else if (tokenID == PlsqlTokenContext.LPAREN_ID) {
1.11 //keep tab after '(' e.x in procedure and function declarations
1.12 return getTabSize();
1.13 @@ -1074,13 +1077,19 @@
1.14 //This will be useful for SELECT , UPDATE , INTO variables
1.15 TokenItem first = findLineFirstNonWhitespace(getPosition(previousNWS, 0)).getToken();
1.16 String previousKeyword = first.getImage().trim();
1.17 + TokenItem findStatementStart = findStatementStart(first);
1.18 + if (findStatementStart != null) {
1.19 + previousKeyword = findStatementStart.getImage().trim();
1.20 + }
1.21
1.22 - if ((previousKeyword.equalsIgnoreCase("SELECT"))
1.23 - || (previousKeyword.equalsIgnoreCase("INTO"))
1.24 - || (previousKeyword.equalsIgnoreCase("FROM"))
1.25 - || (previousKeyword.equalsIgnoreCase("SET"))) {
1.26 - return getTabSize();
1.27 - }
1.28 + if (previousKeyword.equalsIgnoreCase("SELECT") || (previousKeyword.equalsIgnoreCase("FROM"))) {
1.29 + return getIndentForSelect(previousNWS);
1.30 + }
1.31 +
1.32 + if ((previousKeyword.equalsIgnoreCase("INTO"))
1.33 + || (previousKeyword.equalsIgnoreCase("SET"))) {
1.34 + return getTabSize();
1.35 + }
1.36 } else if (previousNWS.getImage().trim().equalsIgnoreCase("*")) {
1.37 //Used for a case like 'Select *'
1.38 if (getPreviousKeyword(previousNWS).getImage().trim().equalsIgnoreCase("SELECT")) {
1.39 @@ -1419,6 +1428,32 @@
1.40
1.41 return tokenRes;
1.42 }
1.43 +
1.44 + /**
1.45 + * Get the correct indent for Select statements
1.46 + * @param previousNWS
1.47 + * @return token item, null if not found
1.48 + */
1.49 + private int getIndentForSelect(TokenItem previousNWS) {
1.50 +
1.51 + int indent = getTabSize();
1.52 + TokenItem first = findLineFirstNonWhitespace(getPosition(previousNWS, 0)).getToken();
1.53 +
1.54 + int parent = getVisualColumnOffset(getPosition(first, 0));
1.55 + TokenItem findStatementStart = findStatementStart(first);
1.56 +
1.57 + if (findStatementStart != null) {
1.58 + first = findStatementStart;
1.59 + }
1.60 +
1.61 + do {
1.62 + first = first.getNext();
1.63 + if ((first != null) && (first.getTokenID() != PlsqlTokenContext.WHITESPACE) && (first.getTokenID() != PlsqlTokenContext.BLOCK_COMMENT) && (first.getTokenID() != PlsqlTokenContext.LINE_COMMENT)) {
1.64 + return getVisualColumnOffset(getPosition(first, 0)) - parent;
1.65 + }
1.66 + } while (first != null);
1.67 + return indent;
1.68 + }
1.69
1.70 /**
1.71 * Method to calculate indentation difference between two token items