GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — sqlparser/rewriter.go at master · bramp/sqlparser Expand file tree/ Copy pathrewriter.goMore file actions 40 lines (36 loc) · 944 Bytes / Copy pathrewriter.goFile metadata and controls40 lines (36 loc) · 944 Bytes 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 package sqlparser import ( _ "fmt" "reflect" ) var typeOfBytes = reflect.TypeOf([]byte(nil)) var typeOfSQLNode = reflect.TypeOf((*SQLNode)(nil)).Elem() type Rewriter func([]byte) []byte func Rewrite(node SQLNode, rewriter Rewriter) { rewrite(reflect.ValueOf(node), rewriter) } func rewrite(nodeVal reflect.Value, rewriter Rewriter) { if !nodeVal.IsValid() { return } nodeTyp := nodeVal.Type() switch nodeTyp.Kind() { case reflect.Slice: if nodeTyp == typeOfBytes && !nodeVal.IsNil() { val := rewriter(nodeVal.Bytes()) //use rewriter to rewrite the bytes nodeVal.SetBytes(val) } else if nodeTyp.Implements(typeOfSQLNode) { for i := 0; i < nodeVal.Len(); i++ { m := nodeVal.Index(i) rewrite(m, rewriter) } } case reflect.Struct: for i := 0; i < nodeVal.NumField(); i++ { f := nodeVal.Field(i) rewrite(f, rewriter) } case reflect.Ptr, reflect.Interface: rewrite(nodeVal.Elem(), rewriter) } } |
| You are visitor 01402520 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |