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 TBlockSqlNode blcok = null; // sql server 215 private TStatementListSqlNode stmts = null; // plsql 216 private TStatementListSqlNode declareStmts = null; // plsql 217 private TStatementSqlNode stmt = null;//mysql single stmt in function body 218 private TConstant functionBody; 219 220 public void setFunctionBody(TConstant functionBody) { 221 this.functionBody = functionBody; 222 this.functionDefinition = functionBody; 223 } 224 225 public TConstant getFunctionBody() { 226 return functionBody; 227 } 228 229 public void setFunctionDefinition(TConstant functionDefinition) { 230 this.functionDefinition = functionDefinition; 231 } 232 233 public TConstant getFunctionDefinition() { 234 235 return functionDefinition; 236 } 237 238 private TConstant functionDefinition; 239 240 public void setStmt(TStatementSqlNode stmt) { 241 this.stmt = stmt; 242 } 243 244 public TStatementSqlNode getStmt() { 245 246 return stmt; 247 } 248 249 public TExceptionClause getExceptionClause() { 250 return exceptionClause; 251 } 252 253 public void setExceptionClause(TExceptionClause exceptionClause) { 254 this.exceptionClause = exceptionClause; 255 } 256 257 private TExceptionClause exceptionClause = null; //plsql exception 258 259 public TStatementListSqlNode getDeclareStmts() { 260 return declareStmts; 261 } 262 263 public void setDeclareStmts(TStatementListSqlNode declareStmts) { 264 265 this.declareStmts = declareStmts; 266 } 267 268 public TStatementListSqlNode getStmts() { 269 return stmts; 270 } 271 272 public void setStmts(TStatementListSqlNode stmts) { 273 274 this.stmts = stmts; 275 } 276 277 public TBlockSqlNode getBlcok() { 278 return blcok; 279 } 280 281 public TReturnSqlNode getReturnSqlNode() { 282 return returnSqlNode; 283 } 284 285 private TReturnSqlNode returnSqlNode = null; 286 287 public void setReturnSqlNode(TReturnSqlNode returnSqlNode) { 288 this.returnSqlNode = returnSqlNode; 289 } 290 291 public void setBlcok(TBlockSqlNode blcok) { 292 this.blcok = blcok; 293 } 294 295 public TParameterDeclarationList getParameters() { 296 return parameters; 297 } 298 299 private TTypeName returnDataType = null; 300 301 public void setReturnDataType(TTypeName returnDataType) { 302 this.returnDataType = returnDataType; 303 } 304 305 public TTypeName getReturnDataType() { 306 307 return returnDataType; 308 } 309 310 private TDummy returnTable = null; 311 312 public void setReturnTable(TDummy returnTable) { 313 this.returnTable = returnTable; 314 } 315 316 public TDummy getReturnTable() { 317 318 return returnTable; 319 } 320 321 private TCompoundSqlNode compoundSql = null; 322 private TReturnSqlNode returnSql = null; 323 324 public TCompoundSqlNode getCompoundSql() { 325 return compoundSql; 326 } 327 328 public void setReturnSql(TReturnSqlNode returnSql) { 329 this.returnSql = returnSql; 330 } 331 332 public TReturnSqlNode getReturnSql() { 333 return returnSql; 334 } 335 336 public void setBody(Object arg1){ 337 if (arg1 instanceof TReturnSqlNode){ 338 returnSql = (TReturnSqlNode)arg1; 339 }else if (arg1 instanceof TCompoundSqlNode){ 340 compoundSql = (TCompoundSqlNode)arg1; 341 } 342 } 343 344 345 public void setFunctionOptions(TPTNodeList<TCreateFunctionOption> options){ 346 if (options == null) return; 347 for(int i=0;i<options.size();i++){ 348 setFunctionOption(options.getElement(i)); 349 } 350 } 351 352 private TConstant objfile; 353 354 public void setObjfile(TConstant objfile) { 355 this.objfile = objfile; 356 } 357 358 public void setLinkSymbol(TConstant linkSymbol) { 359 this.linkSymbol = linkSymbol; 360 } 361 362 private TConstant linkSymbol; 363 364 public TConstant getLinkSymbol() { 365 return linkSymbol; 366 } 367 368 public TConstant getObjfile() { 369 return objfile; 370 } 371 372 private TConstant procedureLanguage; 373 374 public TConstant getProcedureLanguage() { 375 return procedureLanguage; 376 } 377 378 private TObjectName labelName = null; 379 380 public void setLabelName(TObjectName labelName) { 381 this.labelName = labelName; 382 } 383 384 public TObjectName getLabelName() { 385 return labelName; 386 } 387 388 public void setFunctionOption(TCreateFunctionOption option){ 389// boolean isplpgsql = true; 390// if (procedureLanguage != null){ 391// if (!(procedureLanguage.toString().equalsIgnoreCase("plpgsql"))){ 392// isplpgsql = false; 393// } 394// } 395 switch (option.getOptionType()){ 396 case block: 397// TBlockSqlNode blockSqlNode = option.getBlockSqlNode(); 398// labelName = blockSqlNode.getLabelName(); 399// setDeclareStmts(blockSqlNode.getDeclareStmts()); 400// setStmts(blockSqlNode.getStmts()); 401// setExceptionClause(blockSqlNode.getExceptionClause()); 402 functionBody = option.getFunctionBody(); 403 break; 404 case stmts: 405 //setStmts(option.getSqlNodes()); 406 functionBody = option.getFunctionBody(); 407 break; 408 case language: 409 procedureLanguage = option.getLanguage(); 410 break; 411 case objfile: 412 objfile = option.getObjfile(); 413 linkSymbol = option.getLinkSymbol(); 414 break; 415 default: 416 break; 417 } 418 } 419 420}