001package gudusoft.gsqlparser.stmt.snowflake; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.nodes.TCreateTableOption; 005import gudusoft.gsqlparser.nodes.TObjectName; 006import gudusoft.gsqlparser.nodes.TParseTreeVisitor; 007import gudusoft.gsqlparser.nodes.snowflake.*; 008 009/** 010 * Snowflake CREATE SEMANTIC VIEW statement. 011 * 012 * @see <a href="https://docs.snowflake.com/en/sql-reference/sql/create-semantic-view"> 013 * Snowflake CREATE SEMANTIC VIEW</a> 014 */ 015public class TCreateSemanticViewStmt extends TCustomSqlStatement { 016 017 private TObjectName viewName; 018 private TSemanticViewClause tablesClause; 019 private TSemanticViewClause relationshipsClause; 020 private TSemanticViewClause factsClause; 021 private TSemanticViewClause dimensionsClause; 022 private TSemanticViewClause metricsClause; 023 private TObjectName comment; 024 025 public TCreateSemanticViewStmt(EDbVendor dbvendor) { 026 super(dbvendor); 027 sqlstatementtype = ESqlStatementType.sstcreatesemanticview; 028 } 029 030 public TObjectName getViewName() { 031 return viewName; 032 } 033 034 public TSemanticViewClause getTablesClause() { 035 return tablesClause; 036 } 037 038 public TSemanticViewClause getRelationshipsClause() { 039 return relationshipsClause; 040 } 041 042 public TSemanticViewClause getFactsClause() { 043 return factsClause; 044 } 045 046 public TSemanticViewClause getDimensionsClause() { 047 return dimensionsClause; 048 } 049 050 public TSemanticViewClause getMetricsClause() { 051 return metricsClause; 052 } 053 054 public TObjectName getComment() { 055 return comment; 056 } 057 058 @Override 059 public int doParseStatement(TCustomSqlStatement psql) { 060 if (rootNode == null) return -1; 061 super.doParseStatement(psql); 062 063 TCreateSemanticViewSqlNode node = (TCreateSemanticViewSqlNode) rootNode; 064 viewName = node.getViewName(); 065 if (viewName != null) { 066 viewName.setDbObjectType(EDbObjectType.view); 067 } 068 069 // Extract each clause from the list 070 tablesClause = node.getTablesClause(); 071 relationshipsClause = node.getRelationshipsClause(); 072 factsClause = node.getFactsClause(); 073 dimensionsClause = node.getDimensionsClause(); 074 metricsClause = node.getMetricsClause(); 075 076 // Extract comment from commentClause 077 TCreateTableOption commentOption = node.getCommentClause(); 078 if (commentOption != null) { 079 comment = commentOption.getComment(); 080 } 081 082 return 0; 083 } 084 085 @Override 086 public void accept(TParseTreeVisitor v) { 087 v.preVisit(this); 088 v.postVisit(this); 089 } 090 091 @Override 092 public void acceptChildren(TParseTreeVisitor v) { 093 v.preVisit(this); 094 if (viewName != null) { 095 viewName.accept(v); 096 } 097 if (tablesClause != null) { 098 tablesClause.accept(v); 099 } 100 if (relationshipsClause != null) { 101 relationshipsClause.accept(v); 102 } 103 if (factsClause != null) { 104 factsClause.accept(v); 105 } 106 if (dimensionsClause != null) { 107 dimensionsClause.accept(v); 108 } 109 if (metricsClause != null) { 110 metricsClause.accept(v); 111 } 112 if (comment != null) { 113 comment.accept(v); 114 } 115 v.postVisit(this); 116 } 117}