001package gudusoft.gsqlparser.nodes; 002 003import gudusoft.gsqlparser.EDbObjectType; 004import gudusoft.gsqlparser.TSourceToken; 005import gudusoft.gsqlparser.nodes.mssql.TProcedureOption; 006import gudusoft.gsqlparser.nodes.oracle.TInvokerRightsClause; 007import gudusoft.gsqlparser.nodes.oracle.TParallelEnableClause; 008import gudusoft.gsqlparser.nodes.oracle.TResultCacheClause; 009import gudusoft.gsqlparser.TBaseType; 010 011/** 012 * Internal use in the parser.. 013*/ 014public class TCreateFunctionSqlNode extends TParseTreeNode { 015 private String className; 016 private String resourceType;//jar, file 017 private String resourceURI;// 018 019 private TSelectSqlNode sqlQuery; 020 021 public void setSqlQuery(TSelectSqlNode sqlQuery) { 022 this.sqlQuery = sqlQuery; 023 } 024 025 public TSelectSqlNode getSqlQuery() { 026 return sqlQuery; 027 } 028 029 public String getClassName() { 030 return className; 031 } 032 033 public String getResourceType() { 034 return resourceType; 035 } 036 037 public String getResourceURI() { 038 return resourceURI; 039 } 040 041 public void setSparkSqlResourceLocation(TDummy dummy){ 042 this.resourceType = dummy.st1.toString(); 043 this.resourceURI = dummy.st2.toString(); 044 } 045 046 public void setClassNameByToken(TSourceToken st){ 047 this.className = st.toString(); 048 } 049 050 private TExpression sqlExpression;//bigquery 051 052 public void setSqlExpression(TExpression sqlExpression) { 053 this.sqlExpression = sqlExpression; 054 } 055 056 public TExpression getSqlExpression() { 057 return sqlExpression; 058 } 059 060 private TObjectName endlabelName; 061 062 public void setEndlabelName(TObjectName endlabelName) { 063 this.endlabelName = endlabelName; 064 } 065 066 public TObjectName getEndlabelName() { 067 068 return endlabelName; 069 } 070 071 public TConstant getSharedLibraryName() { 072 return sharedLibraryName; 073 } 074 075 public void setSharedLibraryName(TConstant sharedLibraryName) { 076 077 this.sharedLibraryName = sharedLibraryName; 078 } 079 080 private TConstant sharedLibraryName; 081 082 private TPTNodeList <TProcedureOption> procedureOptions; 083 084 public void setProcedureOptions(TPTNodeList<TProcedureOption> procedureOptions) { 085 this.procedureOptions = procedureOptions; 086 } 087 088 public TPTNodeList<TProcedureOption> getProcedureOptions() { 089 090 return procedureOptions; 091 } 092 093 private boolean isDeterministic; 094 private TInvokerRightsClause invokerRightsClause; 095 private TParallelEnableClause parallelEnableClause; 096 private TResultCacheClause resultCacheClause; 097 private TObjectName implementionType; 098 099 public void setImplementionType(TObjectName implementionType) { 100 this.implementionType = implementionType; 101 } 102 103 public TObjectName getImplementionType() { 104 105 return implementionType; 106 } 107 108 public void setFunctionCharacter(TDummy dummy){ 109 if (dummy == null) return; 110 if (dummy.list1 != null){ 111 setFuncHintList((TDummyList)dummy.list1); 112 } 113 } 114 115 public void setFuncHintList(TDummyList dummyList){ 116 117 if (dummyList == null) return; 118 119 for(int i=0; i<dummyList.size();i++){ 120 TDummy dummy = dummyList.getDummyItem(i); 121 if (dummy.st1 != null){ 122 isDeterministic = true; 123 }else{ 124 if (dummy.node1 instanceof TInvokerRightsClause){ 125 invokerRightsClause = (TInvokerRightsClause)(dummy.node1); 126 }else if (dummy.node1 instanceof TParallelEnableClause){ 127 parallelEnableClause = (TParallelEnableClause)(dummy.node1); 128 }else if (dummy.node1 instanceof TResultCacheClause){ 129 resultCacheClause = (TResultCacheClause)(dummy.node1); 130 } 131 } 132 } 133 } 134 135 public boolean isDeterministic() { 136 return isDeterministic; 137 } 138 139 public TParallelEnableClause getParallelEnableClause() { 140 return parallelEnableClause; 141 } 142 143 public TResultCacheClause getResultCacheClause() { 144 return resultCacheClause; 145 } 146 147 public TInvokerRightsClause getInvokerRightsClause() { 148 149 return invokerRightsClause; 150 } 151 152 private TObjectName functionName = null; 153 private TObjectName asName; 154 155 public TObjectName getAsName() { 156 return asName; 157 } 158 159 public TObjectName getFunctionName() { 160 return functionName; 161 } 162 163 private TParameterDeclarationList parameters = null; 164 165 public void setParameters(TParameterDeclarationList parameters) { 166 this.parameters = parameters; 167 } 168 169 public void setParametersByDummy(TDummy node) { 170 if (node == null) return; 171 if (node.node1 != null){ 172 this.parameters = (TParameterDeclarationList)node.node1; 173 } 174 } 175 176 public void init(Object arg1) 177 { 178 functionName = (TObjectName)arg1; 179 if (functionName.getDbObjectType() != EDbObjectType.function){ 180 // not set yet, then do this here 181 functionName.setObjectType(TObjectName.ttobjFunctionName); 182 } 183 184 functionName.splitNameInQuotedIdentifier(); 185 } 186 187 public void init(Object arg1,Object arg2) 188 { 189 init(arg1); 190 asName = (TObjectName)arg2; 191 } 192 193 public void setKind(int kind) { 194 this.kind = kind; 195 } 196 197 public int getKind() { 198 return kind; 199 } 200 201 private TCallSpec callSpec = null; 202 203 public TCallSpec getCallSpec() { 204 return callSpec; 205 } 206 207 public void setCallSpec(TCallSpec callSpec) { 208 209 this.callSpec = callSpec; 210 } 211 212 private int kind = TBaseType.kind_create;// what's kind of this function 213 214 private boolean ifNotExists = false; 215 216 public boolean isIfNotExists() { 217 return ifNotExists; 218 } 219 220 public void setIfNotExists(boolean ifNotExists) { 221 this.ifNotExists = ifNotExists; 222 } 223 224 private TBlockSqlNode blcok = null; // sql server 225 private TStatementListSqlNode stmts = null; // plsql 226 private TStatementListSqlNode declareStmts = null; // plsql 227 private TStatementSqlNode stmt = null;//mysql single stmt in function body 228 private TConstant functionBody; 229 230 public void setFunctionBody(TConstant functionBody) { 231 this.functionBody = functionBody; 232 this.functionDefinition = functionBody; 233 } 234 235 public TConstant getFunctionBody() { 236 return functionBody; 237 } 238 239 public void setFunctionDefinition(TConstant functionDefinition) { 240 this.functionDefinition = functionDefinition; 241 } 242 243 public TConstant getFunctionDefinition() { 244 245 return functionDefinition; 246 } 247 248 private TConstant functionDefinition; 249 250 public void setStmt(TStatementSqlNode stmt) { 251 this.stmt = stmt; 252 } 253 254 public TStatementSqlNode getStmt() { 255 256 return stmt; 257 } 258 259 public TExceptionClause getExceptionClause() { 260 return exceptionClause; 261 } 262 263 public void setExceptionClause(TExceptionClause exceptionClause) { 264 this.exceptionClause = exceptionClause; 265 } 266 267 private TExceptionClause exceptionClause = null; //plsql exception 268 269 public TStatementListSqlNode getDeclareStmts() { 270 return declareStmts; 271 } 272 273 public void setDeclareStmts(TStatementListSqlNode declareStmts) { 274 275 this.declareStmts = declareStmts; 276 } 277 278 public TStatementListSqlNode getStmts() { 279 return stmts; 280 } 281 282 public void setStmts(TStatementListSqlNode stmts) { 283 284 this.stmts = stmts; 285 } 286 287 public TBlockSqlNode getBlcok() { 288 return blcok; 289 } 290 291 public TReturnSqlNode getReturnSqlNode() { 292 return returnSqlNode; 293 } 294 295 private TReturnSqlNode returnSqlNode = null; 296 297 public void setReturnSqlNode(TReturnSqlNode returnSqlNode) { 298 this.returnSqlNode = returnSqlNode; 299 } 300 301 public void setBlcok(TBlockSqlNode blcok) { 302 this.blcok = blcok; 303 } 304 305 public TParameterDeclarationList getParameters() { 306 return parameters; 307 } 308 309 private TTypeName returnDataType = null; 310 311 public void setReturnDataType(TTypeName returnDataType) { 312 this.returnDataType = returnDataType; 313 } 314 315 public TTypeName getReturnDataType() { 316 317 return returnDataType; 318 } 319 320 private TDummy returnTable = null; 321 322 public void setReturnTable(TDummy returnTable) { 323 this.returnTable = returnTable; 324 } 325 326 public TDummy getReturnTable() { 327 328 return returnTable; 329 } 330 331 private TCompoundSqlNode compoundSql = null; 332 private TReturnSqlNode returnSql = null; 333 334 public TCompoundSqlNode getCompoundSql() { 335 return compoundSql; 336 } 337 338 public void setReturnSql(TReturnSqlNode returnSql) { 339 this.returnSql = returnSql; 340 } 341 342 public TReturnSqlNode getReturnSql() { 343 return returnSql; 344 } 345 346 public void setBody(Object arg1){ 347 if (arg1 instanceof TReturnSqlNode){ 348 returnSql = (TReturnSqlNode)arg1; 349 }else if (arg1 instanceof TCompoundSqlNode){ 350 compoundSql = (TCompoundSqlNode)arg1; 351 } 352 } 353 354 355 public void setFunctionOptions(TPTNodeList<TCreateFunctionOption> options){ 356 if (options == null) return; 357 for(int i=0;i<options.size();i++){ 358 setFunctionOption(options.getElement(i)); 359 } 360 } 361 362 private TConstant objfile; 363 364 public void setObjfile(TConstant objfile) { 365 this.objfile = objfile; 366 } 367 368 public void setLinkSymbol(TConstant linkSymbol) { 369 this.linkSymbol = linkSymbol; 370 } 371 372 private TConstant linkSymbol; 373 374 public TConstant getLinkSymbol() { 375 return linkSymbol; 376 } 377 378 public TConstant getObjfile() { 379 return objfile; 380 } 381 382 private TConstant procedureLanguage; 383 384 public TConstant getProcedureLanguage() { 385 return procedureLanguage; 386 } 387 388 private TObjectName labelName = null; 389 390 public void setLabelName(TObjectName labelName) { 391 this.labelName = labelName; 392 } 393 394 public TObjectName getLabelName() { 395 return labelName; 396 } 397 398 public void setFunctionOption(TCreateFunctionOption option){ 399// boolean isplpgsql = true; 400// if (procedureLanguage != null){ 401// if (!(procedureLanguage.toString().equalsIgnoreCase("plpgsql"))){ 402// isplpgsql = false; 403// } 404// } 405 switch (option.getOptionType()){ 406 case block: 407// TBlockSqlNode blockSqlNode = option.getBlockSqlNode(); 408// labelName = blockSqlNode.getLabelName(); 409// setDeclareStmts(blockSqlNode.getDeclareStmts()); 410// setStmts(blockSqlNode.getStmts()); 411// setExceptionClause(blockSqlNode.getExceptionClause()); 412 functionBody = option.getFunctionBody(); 413 break; 414 case stmts: 415 //setStmts(option.getSqlNodes()); 416 functionBody = option.getFunctionBody(); 417 break; 418 case language: 419 procedureLanguage = option.getLanguage(); 420 break; 421 case objfile: 422 objfile = option.getObjfile(); 423 linkSymbol = option.getLinkSymbol(); 424 break; 425 default: 426 break; 427 } 428 } 429 430 // StarRocks-specific fields for CREATE [OR REPLACE] [GLOBAL] [AGGREGATE|TABLE] FUNCTION ... PROPERTIES (...) 431 private boolean starrocksGlobal = false; 432 private boolean starrocksAggregate = false; 433 private boolean starrocksTableFunction = false; 434 private boolean starrocksOrReplace = false; 435 private TTypeName starrocksIntermediateType = null; 436 private TPTNodeList starrocksProperties = null; 437 438 public boolean isStarrocksGlobal() { return starrocksGlobal; } 439 public void setStarrocksGlobal(boolean starrocksGlobal) { this.starrocksGlobal = starrocksGlobal; } 440 441 public boolean isStarrocksAggregate() { return starrocksAggregate; } 442 public void setStarrocksAggregate(boolean starrocksAggregate) { this.starrocksAggregate = starrocksAggregate; } 443 444 public boolean isStarrocksTableFunction() { return starrocksTableFunction; } 445 public void setStarrocksTableFunction(boolean starrocksTableFunction) { this.starrocksTableFunction = starrocksTableFunction; } 446 447 public boolean isStarrocksOrReplace() { return starrocksOrReplace; } 448 public void setStarrocksOrReplace(boolean starrocksOrReplace) { this.starrocksOrReplace = starrocksOrReplace; } 449 450 public TTypeName getStarrocksIntermediateType() { return starrocksIntermediateType; } 451 public void setStarrocksIntermediateType(TTypeName starrocksIntermediateType) { this.starrocksIntermediateType = starrocksIntermediateType; } 452 453 public TPTNodeList getStarrocksProperties() { return starrocksProperties; } 454 public void setStarrocksProperties(TPTNodeList starrocksProperties) { this.starrocksProperties = starrocksProperties; } 455 456}