001package gudusoft.gsqlparser.nodes.teradata; 002/* 003 * Date: 13-8-27 004 */ 005 006import gudusoft.gsqlparser.ESqlClause; 007import gudusoft.gsqlparser.TCustomSqlStatement; 008import gudusoft.gsqlparser.nodes.*; 009 010import java.util.ArrayList; 011 012/** 013 * index option used in teradata create table statement 014 */ 015public class TIndexDefinition extends TParseTreeNode { 016 public enum EIndexType {primaryKey,uniquePrimaryKey,noPrimaryKey,primaryAmp,partitionBy,uniqueKey,index,uniqueIndex, 017 noPrimaryIndex,uniquePrimaryIndex,primaryIndex}; 018 private EIndexType indexType; 019 020 public EIndexType getIndexType() { 021 return indexType; 022 } 023 024 private TObjectName indexName; 025 private boolean unique; 026 private boolean primary; 027 private boolean all; 028 private TObjectNameList indexColumns; 029 private ArrayList<TPartitioningLevel> partitioningLevels; 030 031 032 public ArrayList<TPartitioningLevel> getPartitioningLevels() { 033 return partitioningLevels; 034 } 035 036 public void setUnique(boolean unique) { 037 this.unique = unique; 038 } 039 040// public void setPartitionExprList(TExpressionList partitionExprList) { 041// this.partitionExprList = partitionExprList; 042// } 043 044 public void setPrimary(boolean primary) { 045 046 this.primary = primary; 047 } 048 049 public void setOrderColumnName(TObjectName orderColumnName) { 050 this.orderColumnName = orderColumnName; 051 } 052 053 private TExpressionList partitionExprList; 054 private TObjectName orderColumnName; 055 056 public void setAll(boolean all) { 057 this.all = all; 058 } 059 060 public void init(Object arg1){ 061 indexType = (EIndexType)arg1; 062 } 063 064 065 public void init(Object arg1,Object arg2){ 066 init(arg1); 067 switch (indexType){ 068 case partitionBy: 069 if (arg2 instanceof TPartitioningLevel){ 070 this.partitioningLevels = new ArrayList<TPartitioningLevel>(); 071 this.partitioningLevels.add((TPartitioningLevel)arg2); 072 }else{ 073 this.partitioningLevels = (ArrayList<TPartitioningLevel>)arg2; 074 } 075 break; 076 default: 077 indexColumns = (TObjectNameList)arg2; 078 break; 079 } 080 081 } 082 083 public void init(Object arg1,Object arg2,Object arg3){ 084 init(arg1,arg2); 085 indexName = (TObjectName)arg3; 086 } 087 088 public boolean isAll() { 089 return all; 090 } 091 092 public TObjectNameList getIndexColumns() { 093 return indexColumns; 094 } 095 096 public TObjectName getIndexName() { 097 return indexName; 098 } 099 100 public TObjectName getOrderColumnName() { 101 return orderColumnName; 102 } 103 104 /** 105 * @deprecated since v2.6.0.5, please use {@link #getPartitioningLevels()} instead 106 * @return 107 */ 108 public TExpressionList getPartitionExprList() { 109 return partitionExprList; 110 } 111 112 public boolean isPrimary() { 113 return primary; 114 } 115 116 public boolean isUnique() { 117 return unique; 118 } 119 120 public void accept(TParseTreeVisitor v){ 121 v.preVisit(this); 122 v.postVisit(this); 123 } 124 125 public void acceptChildren(TParseTreeVisitor v){ 126 v.preVisit(this); 127 v.postVisit(this); 128 } 129 130 public void setIndexName(TObjectName indexName) { 131 this.indexName = indexName; 132 } 133 134 public void setIndexColumns(TObjectNameList indexColumns) { 135 this.indexColumns = indexColumns; 136 } 137 138 public void doParse(TCustomSqlStatement psql, ESqlClause plocation){ 139 if(partitionExprList != null){ 140 for(int i=0;i<partitionExprList.size();i++){ 141 if (i == 0) continue; // the first element is COLUMN keyword. 142 partitionExprList.getExpression(i).doParse(psql,plocation); 143 } 144 } 145 } 146}