001package gudusoft.gsqlparser.nodes; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.stmt.TSelectSqlStatement; 005 006import javax.swing.border.TitledBorder; 007 008/** 009 * Item in order by clause. 010 * <p> Syntax: 011 * <blockquote><pre> 012 * ORDER BY {sort-key [ASC|DESC}[,..n] 013 * sort-key: 014 * simple-column-name 015 * simple-integer 016 * sort-key-expression</pre> 017 * </blockquote> 018 * 019*/ 020public class TOrderByItem extends TParseTreeNode { 021 022 private ENullOrder nullOrder = ENullOrder.notSet; 023 024 public ENullOrder getNullOrder() { 025 return nullOrder; 026 } 027 028 public void setNullOrder(ENullOrder nullOrder) { 029 this.nullOrder = nullOrder; 030 } 031 032 public void setNullOrder(TSourceToken nullOrder) { 033 if (nullOrder == null) return; 034 if (nullOrder.toString().equalsIgnoreCase("first")){ 035 this.nullOrder = ENullOrder.nullsFirst; 036 }else if (nullOrder.toString().equalsIgnoreCase("last")){ 037 this.nullOrder = ENullOrder.nullsLast; 038 } 039 } 040 041 public ESortType getSortOrder() { 042 return sortOrder; 043 } 044 045 private ESortType sortOrder = ESortType.none; 046 047 public void setSortOrder(ESortType sortOrder) { 048 this.sortOrder = sortOrder; 049 } 050 051 public void setSortKey(TExpression sortKey) { 052 this.sortKey = sortKey; 053 } 054 055 public void TOrderByItem(){ 056 057 } 058 059 private TExpression sortKey; 060 061 /** 062 * @deprecated As of v1.6.4.9, use {@link #getSortOrder} instead 063 * @return sort order 064 */ 065 public int getSortType() { 066 return sortType; 067 } 068 069 public void setSortTypeByToken(TSourceToken st){ 070 if (st == null) return ; 071 if (st.astext.equalsIgnoreCase("asc")){ 072 this.sortType = TBaseType.srtAsc; 073 sortOrder = ESortType.asc; 074 }else if (st.astext.equalsIgnoreCase("desc")){ 075 this.sortType = TBaseType.srtDesc; 076 sortOrder = ESortType.desc; 077 } 078 } 079 private int sortType = TBaseType.srtNone; 080 081 public TExpression getSortKey() { 082 return sortKey; 083 } 084 085 public void init(Object arg1) 086 { 087 sortKey = (TExpression)arg1; 088 } 089 090 public void doParse(TCustomSqlStatement psql, ESqlClause plocation){ 091 if (sortKey != null){ 092 if ((psql != null)&&(psql instanceof TSelectSqlStatement)&&(sortKey.getExpressionType() == EExpressionType.simple_object_name_t)){ 093 if ((sortKey.getObjectOperand().getPartToken() != null) 094 &&(sortKey.getObjectOperand().getObjectToken() == null)){ 095 // this column not qualified by a table name/alias 096 if (psql.getResultColumnList() != null){ 097 for(int i=0;i<psql.getResultColumnList().size();i++){ 098 TResultColumn column = psql.getResultColumnList().getResultColumn(i); 099 if (column.getAliasClause() != null){ 100 if (column.getAliasClause().getAliasName().toString().equalsIgnoreCase(sortKey.toString())){ 101 //sortKey.getObjectOperand().getPartToken().setDbObjType(TObjectName.ttobjColumnAlias); 102 sortKey.getObjectOperand().setObjectType(TObjectName.ttobjColumnAlias); 103 break; 104 } 105 } 106 } 107 } 108 } 109 } 110 sortKey.doParse(psql, ESqlClause.orderby); 111 } 112 } 113 114 public void accept(TParseTreeVisitor v){ 115 v.preVisit(this); 116 v.postVisit(this); 117 } 118 119 public void acceptChildren(TParseTreeVisitor v){ 120 v.preVisit(this); 121 if (sortKey != null){ 122 sortKey.acceptChildren(v); 123 } 124 v.postVisit(this); 125 } 126 127 public void setSortType(int sortType) { 128 this.sortType = sortType; 129 } 130}