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 TObjectName externalName = null; 332 333 /** 334 * SQL Server CLR routine body: the <code>assembly.class.method</code> name 335 * after <code>AS EXTERNAL NAME</code>. 336 */ 337 public void setExternalName(TObjectName externalName) { 338 this.externalName = externalName; 339 } 340 341 public TObjectName getExternalName() { 342 return externalName; 343 } 344 345 private TCompoundSqlNode compoundSql = null; 346 private TReturnSqlNode returnSql = null; 347 348 public TCompoundSqlNode getCompoundSql() { 349 return compoundSql; 350 } 351 352 public void setReturnSql(TReturnSqlNode returnSql) { 353 this.returnSql = returnSql; 354 } 355 356 public TReturnSqlNode getReturnSql() { 357 return returnSql; 358 } 359 360 public void setBody(Object arg1){ 361 if (arg1 instanceof TReturnSqlNode){ 362 returnSql = (TReturnSqlNode)arg1; 363 }else if (arg1 instanceof TCompoundSqlNode){ 364 compoundSql = (TCompoundSqlNode)arg1; 365 } 366 } 367 368 369 public void setFunctionOptions(TPTNodeList<TCreateFunctionOption> options){ 370 if (options == null) return; 371 for(int i=0;i<options.size();i++){ 372 setFunctionOption(options.getElement(i)); 373 } 374 } 375 376 private TConstant objfile; 377 378 public void setObjfile(TConstant objfile) { 379 this.objfile = objfile; 380 } 381 382 public void setLinkSymbol(TConstant linkSymbol) { 383 this.linkSymbol = linkSymbol; 384 } 385 386 private TConstant linkSymbol; 387 388 public TConstant getLinkSymbol() { 389 return linkSymbol; 390 } 391 392 public TConstant getObjfile() { 393 return objfile; 394 } 395 396 private TConstant procedureLanguage; 397 398 public TConstant getProcedureLanguage() { 399 return procedureLanguage; 400 } 401 402 private TObjectName labelName = null; 403 404 public void setLabelName(TObjectName labelName) { 405 this.labelName = labelName; 406 } 407 408 public TObjectName getLabelName() { 409 return labelName; 410 } 411 412 public void setFunctionOption(TCreateFunctionOption option){ 413// boolean isplpgsql = true; 414// if (procedureLanguage != null){ 415// if (!(procedureLanguage.toString().equalsIgnoreCase("plpgsql"))){ 416// isplpgsql = false; 417// } 418// } 419 switch (option.getOptionType()){ 420 case block: 421// TBlockSqlNode blockSqlNode = option.getBlockSqlNode(); 422// labelName = blockSqlNode.getLabelName(); 423// setDeclareStmts(blockSqlNode.getDeclareStmts()); 424// setStmts(blockSqlNode.getStmts()); 425// setExceptionClause(blockSqlNode.getExceptionClause()); 426 functionBody = option.getFunctionBody(); 427 break; 428 case stmts: 429 //setStmts(option.getSqlNodes()); 430 functionBody = option.getFunctionBody(); 431 break; 432 case language: 433 procedureLanguage = option.getLanguage(); 434 break; 435 case objfile: 436 objfile = option.getObjfile(); 437 linkSymbol = option.getLinkSymbol(); 438 break; 439 default: 440 break; 441 } 442 } 443 444 // StarRocks-specific fields for CREATE [OR REPLACE] [GLOBAL] [AGGREGATE|TABLE] FUNCTION ... PROPERTIES (...) 445 private boolean starrocksGlobal = false; 446 private boolean starrocksAggregate = false; 447 private boolean starrocksTableFunction = false; 448 private boolean starrocksOrReplace = false; 449 private TTypeName starrocksIntermediateType = null; 450 private TPTNodeList starrocksProperties = null; 451 452 public boolean isStarrocksGlobal() { return starrocksGlobal; } 453 public void setStarrocksGlobal(boolean starrocksGlobal) { this.starrocksGlobal = starrocksGlobal; } 454 455 public boolean isStarrocksAggregate() { return starrocksAggregate; } 456 public void setStarrocksAggregate(boolean starrocksAggregate) { this.starrocksAggregate = starrocksAggregate; } 457 458 public boolean isStarrocksTableFunction() { return starrocksTableFunction; } 459 public void setStarrocksTableFunction(boolean starrocksTableFunction) { this.starrocksTableFunction = starrocksTableFunction; } 460 461 public boolean isStarrocksOrReplace() { return starrocksOrReplace; } 462 public void setStarrocksOrReplace(boolean starrocksOrReplace) { this.starrocksOrReplace = starrocksOrReplace; } 463 464 public TTypeName getStarrocksIntermediateType() { return starrocksIntermediateType; } 465 public void setStarrocksIntermediateType(TTypeName starrocksIntermediateType) { this.starrocksIntermediateType = starrocksIntermediateType; } 466 467 public TPTNodeList getStarrocksProperties() { return starrocksProperties; } 468 public void setStarrocksProperties(TPTNodeList starrocksProperties) { this.starrocksProperties = starrocksProperties; } 469 470}