mirror of
				https://gitee.com/dromara/mayfly-go
				synced 2025-11-04 00:10:25 +08:00 
			
		
		
		
	
		
			
	
	
		
			76 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			76 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package sqlstmt
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"reflect"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									"github.com/antlr4-go/antlr/v4"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								type INode interface {
							 | 
						||
| 
								 | 
							
									GetText() string
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// GetStartIndex() int
							 | 
						||
| 
								 | 
							
									// GetStopIndex() int
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								type Node struct {
							 | 
						||
| 
								 | 
							
									// startIndex int
							 | 
						||
| 
								 | 
							
									// stopIndex  int
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									parser      antlr.Parser
							 | 
						||
| 
								 | 
							
									ruleContext antlr.RuleContext
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func (n *Node) GetText() string {
							 | 
						||
| 
								 | 
							
									if n == nil || n.ruleContext == nil || n.parser == nil {
							 | 
						||
| 
								 | 
							
										return ""
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return n.parser.GetTokenStream().GetTextFromRuleContext(n.ruleContext)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// func (n *Node) GetStartIndex() int {
							 | 
						||
| 
								 | 
							
								// 	return n.startIndex
							 | 
						||
| 
								 | 
							
								// }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// func (n *Node) GetStopIndex() int {
							 | 
						||
| 
								 | 
							
								// 	return n.stopIndex
							 | 
						||
| 
								 | 
							
								// }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func NewNode(parser antlr.Parser, ruleContext antlr.RuleContext) *Node {
							 | 
						||
| 
								 | 
							
									return &Node{
							 | 
						||
| 
								 | 
							
										parser:      parser,
							 | 
						||
| 
								 | 
							
										ruleContext: ruleContext,
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// func NewNode(startIndex, stopIndex int) *Node {
							 | 
						||
| 
								 | 
							
								// 	return &Node{
							 | 
						||
| 
								 | 
							
								// 		startIndex: startIndex,
							 | 
						||
| 
								 | 
							
								// 		stopIndex:  stopIndex,
							 | 
						||
| 
								 | 
							
								// 	}
							 | 
						||
| 
								 | 
							
								// }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// func GetText(sqlstmts string, node INode) string {
							 | 
						||
| 
								 | 
							
								// 	return sqlstmts[node.GetStartIndex() : node.GetStopIndex()+1]
							 | 
						||
| 
								 | 
							
								// }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								type Stmt interface {
							 | 
						||
| 
								 | 
							
									INode
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								type SqlStmt struct {
							 | 
						||
| 
								 | 
							
									*Node
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								type DmlStmt struct {
							 | 
						||
| 
								 | 
							
									SqlStmt
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								type OtherReadStmt struct {
							 | 
						||
| 
								 | 
							
									*Node
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func IsSelectStmt(stmt Stmt) bool {
							 | 
						||
| 
								 | 
							
									return reflect.TypeOf(stmt).AssignableTo(reflect.TypeOf(&SelectStmt{}))
							 | 
						||
| 
								 | 
							
								}
							 |