String returns the SQL literal representation of this value, including appropriate quoting and escaping for each ValueType (e.g. single-quoted strings, dollar-quoted strings, hex strings, boolean literals, NULL, etc.).
()
| 98 | // appropriate quoting and escaping for each ValueType (e.g. single-quoted |
| 99 | // strings, dollar-quoted strings, hex strings, boolean literals, NULL, etc.). |
| 100 | func (v Value) String() string { |
| 101 | switch v.Type { |
| 102 | case NumberValue: |
| 103 | if n, ok := v.Value.(Number); ok { |
| 104 | if n.Long { |
| 105 | return fmt.Sprintf("%sL", n.Value) |
| 106 | } |
| 107 | return n.Value |
| 108 | } |
| 109 | return fmt.Sprintf("%v", v.Value) |
| 110 | case SingleQuotedStringValue: |
| 111 | if s, ok := v.Value.(string); ok { |
| 112 | return fmt.Sprintf("'%s'", escapeSingleQuoteString(s)) |
| 113 | } |
| 114 | return fmt.Sprintf("'%v'", v.Value) |
| 115 | case DollarQuotedStringValue: |
| 116 | if dq, ok := v.Value.(DollarQuotedString); ok { |
| 117 | if dq.Tag != "" { |
| 118 | return fmt.Sprintf("$%s$%s$%s$", dq.Tag, dq.Value, dq.Tag) |
| 119 | } |
| 120 | return fmt.Sprintf("$$%s$$", dq.Value) |
| 121 | } |
| 122 | return fmt.Sprintf("$$%v$$", v.Value) |
| 123 | case TripleSingleQuotedStringValue: |
| 124 | return fmt.Sprintf("'''%s'''", v.Value) |
| 125 | case TripleDoubleQuotedStringValue: |
| 126 | return fmt.Sprintf(`"""%s"""`, v.Value) |
| 127 | case EscapedStringLiteralValue: |
| 128 | if s, ok := v.Value.(string); ok { |
| 129 | return fmt.Sprintf("E'%s'", escapeEscapedString(s)) |
| 130 | } |
| 131 | return fmt.Sprintf("E'%v'", v.Value) |
| 132 | case UnicodeStringLiteralValue: |
| 133 | if s, ok := v.Value.(string); ok { |
| 134 | return fmt.Sprintf("U&'%s'", escapeUnicodeString(s)) |
| 135 | } |
| 136 | return fmt.Sprintf("U&'%v'", v.Value) |
| 137 | case SingleQuotedByteStringLiteralValue: |
| 138 | return fmt.Sprintf("B'%s'", v.Value) |
| 139 | case DoubleQuotedByteStringLiteralValue: |
| 140 | return fmt.Sprintf(`B"%s"`, v.Value) |
| 141 | case TripleSingleQuotedByteStringLiteralValue: |
| 142 | return fmt.Sprintf("B'''%s'''", v.Value) |
| 143 | case TripleDoubleQuotedByteStringLiteralValue: |
| 144 | return fmt.Sprintf(`B"""%s"""`, v.Value) |
| 145 | case SingleQuotedRawStringLiteralValue: |
| 146 | return fmt.Sprintf("R'%s'", v.Value) |
| 147 | case DoubleQuotedRawStringLiteralValue: |
| 148 | return fmt.Sprintf(`R"%s"`, v.Value) |
| 149 | case TripleSingleQuotedRawStringLiteralValue: |
| 150 | return fmt.Sprintf("R'''%s'''", v.Value) |
| 151 | case TripleDoubleQuotedRawStringLiteralValue: |
| 152 | return fmt.Sprintf(`R"""%s"""`, v.Value) |
| 153 | case NationalStringLiteralValue: |
| 154 | return fmt.Sprintf("N'%s'", v.Value) |
| 155 | case HexStringLiteralValue: |
| 156 | return fmt.Sprintf("X'%s'", v.Value) |
| 157 | case DoubleQuotedStringValue: |