gitee.com/curryzheng/dm@v0.0.1/ze.go (about) 1 /* 2 * Copyright (c) 2000-2018, 达梦数据库有限公司. 3 * All rights reserved. 4 */ 5 6 package dm 7 8 import ( 9 "context" 10 "database/sql/driver" 11 "reflect" 12 ) 13 14 type filterChain struct { 15 filters []filter 16 fpos int 17 } 18 19 func newFilterChain(filters []filter) *filterChain { 20 fc := new(filterChain) 21 fc.filters = filters 22 fc.fpos = 0 23 return fc 24 } 25 26 func (filterChain *filterChain) reset() *filterChain { 27 filterChain.fpos = 0 28 return filterChain 29 } 30 31 func (filterChain *filterChain) DmDriverOpen(d *DmDriver, dsn string) (*DmConnection, error) { 32 if filterChain.fpos < len(filterChain.filters) { 33 f := filterChain.filters[filterChain.fpos] 34 filterChain.fpos++ 35 return f.DmDriverOpen(filterChain, d, dsn) 36 } 37 38 return d.open(dsn) 39 } 40 41 func (filterChain *filterChain) DmDriverOpenConnector(d *DmDriver, dsn string) (*DmConnector, error) { 42 if filterChain.fpos < len(filterChain.filters) { 43 f := filterChain.filters[filterChain.fpos] 44 filterChain.fpos++ 45 return f.DmDriverOpenConnector(filterChain, d, dsn) 46 } 47 48 return d.openConnector(dsn) 49 } 50 51 //DmConnector 52 func (filterChain *filterChain) DmConnectorConnect(c *DmConnector, ctx context.Context) (*DmConnection, error) { 53 if filterChain.fpos < len(filterChain.filters) { 54 f := filterChain.filters[filterChain.fpos] 55 filterChain.fpos++ 56 return f.DmConnectorConnect(filterChain, c, ctx) 57 } 58 59 return c.connect(ctx) 60 } 61 62 func (filterChain *filterChain) DmConnectorDriver(c *DmConnector) *DmDriver { 63 if filterChain.fpos < len(filterChain.filters) { 64 f := filterChain.filters[filterChain.fpos] 65 filterChain.fpos++ 66 return f.DmConnectorDriver(filterChain, c) 67 } 68 69 return c.driver() 70 } 71 72 //DmConnection 73 func (filterChain *filterChain) DmConnectionBegin(c *DmConnection) (*DmConnection, error) { 74 if filterChain.fpos < len(filterChain.filters) { 75 f := filterChain.filters[filterChain.fpos] 76 filterChain.fpos++ 77 return f.DmConnectionBegin(filterChain, c) 78 } 79 80 return c.begin() 81 } 82 func (filterChain *filterChain) DmConnectionBeginTx(c *DmConnection, ctx context.Context, opts driver.TxOptions) (*DmConnection, error) { 83 if filterChain.fpos < len(filterChain.filters) { 84 f := filterChain.filters[filterChain.fpos] 85 filterChain.fpos++ 86 return f.DmConnectionBeginTx(filterChain, c, ctx, opts) 87 } 88 89 return c.beginTx(ctx, opts) 90 } 91 92 func (filterChain *filterChain) DmConnectionCommit(c *DmConnection) error { 93 if filterChain.fpos < len(filterChain.filters) { 94 f := filterChain.filters[filterChain.fpos] 95 filterChain.fpos++ 96 return f.DmConnectionCommit(filterChain, c) 97 } 98 99 return c.commit() 100 } 101 102 func (filterChain *filterChain) DmConnectionRollback(c *DmConnection) error { 103 if filterChain.fpos < len(filterChain.filters) { 104 f := filterChain.filters[filterChain.fpos] 105 filterChain.fpos++ 106 return f.DmConnectionRollback(filterChain, c) 107 } 108 109 return c.rollback() 110 } 111 112 func (filterChain *filterChain) DmConnectionClose(c *DmConnection) error { 113 if filterChain.fpos < len(filterChain.filters) { 114 f := filterChain.filters[filterChain.fpos] 115 filterChain.fpos++ 116 return f.DmConnectionClose(filterChain, c) 117 } 118 119 return c.close() 120 } 121 122 func (filterChain *filterChain) DmConnectionPing(c *DmConnection, ctx context.Context) error { 123 if filterChain.fpos < len(filterChain.filters) { 124 f := filterChain.filters[filterChain.fpos] 125 filterChain.fpos++ 126 return f.DmConnectionPing(filterChain, c, ctx) 127 } 128 129 return c.ping(ctx) 130 } 131 132 func (filterChain *filterChain) DmConnectionExec(c *DmConnection, query string, args []driver.Value) (*DmResult, error) { 133 if filterChain.fpos < len(filterChain.filters) { 134 f := filterChain.filters[filterChain.fpos] 135 filterChain.fpos++ 136 return f.DmConnectionExec(filterChain, c, query, args) 137 } 138 139 return c.exec(query, args) 140 } 141 142 func (filterChain *filterChain) DmConnectionExecContext(c *DmConnection, ctx context.Context, query string, args []driver.NamedValue) (*DmResult, error) { 143 if filterChain.fpos < len(filterChain.filters) { 144 f := filterChain.filters[filterChain.fpos] 145 filterChain.fpos++ 146 return f.DmConnectionExecContext(filterChain, c, ctx, query, args) 147 } 148 149 return c.execContext(ctx, query, args) 150 } 151 152 func (filterChain *filterChain) DmConnectionQuery(c *DmConnection, query string, args []driver.Value) (*DmRows, error) { 153 if filterChain.fpos < len(filterChain.filters) { 154 f := filterChain.filters[filterChain.fpos] 155 filterChain.fpos++ 156 return f.DmConnectionQuery(filterChain, c, query, args) 157 } 158 159 return c.query(query, args) 160 } 161 162 func (filterChain *filterChain) DmConnectionQueryContext(c *DmConnection, ctx context.Context, query string, args []driver.NamedValue) (*DmRows, error) { 163 if filterChain.fpos < len(filterChain.filters) { 164 f := filterChain.filters[filterChain.fpos] 165 filterChain.fpos++ 166 return f.DmConnectionQueryContext(filterChain, c, ctx, query, args) 167 } 168 169 return c.queryContext(ctx, query, args) 170 } 171 172 func (filterChain *filterChain) DmConnectionPrepare(c *DmConnection, query string) (*DmStatement, error) { 173 if filterChain.fpos < len(filterChain.filters) { 174 f := filterChain.filters[filterChain.fpos] 175 filterChain.fpos++ 176 return f.DmConnectionPrepare(filterChain, c, query) 177 } 178 179 return c.prepare(query) 180 } 181 182 func (filterChain *filterChain) DmConnectionPrepareContext(c *DmConnection, ctx context.Context, query string) (*DmStatement, error) { 183 if filterChain.fpos < len(filterChain.filters) { 184 f := filterChain.filters[filterChain.fpos] 185 filterChain.fpos++ 186 return f.DmConnectionPrepareContext(filterChain, c, ctx, query) 187 } 188 189 return c.prepareContext(ctx, query) 190 } 191 192 func (filterChain *filterChain) DmConnectionResetSession(c *DmConnection, ctx context.Context) error { 193 if filterChain.fpos < len(filterChain.filters) { 194 f := filterChain.filters[filterChain.fpos] 195 filterChain.fpos++ 196 return f.DmConnectionResetSession(filterChain, c, ctx) 197 } 198 199 return c.resetSession(ctx) 200 } 201 202 func (filterChain *filterChain) DmConnectionCheckNamedValue(c *DmConnection, nv *driver.NamedValue) error { 203 if filterChain.fpos < len(filterChain.filters) { 204 f := filterChain.filters[filterChain.fpos] 205 filterChain.fpos++ 206 return f.DmConnectionCheckNamedValue(filterChain, c, nv) 207 } 208 209 return c.checkNamedValue(nv) 210 } 211 212 //DmStatement 213 func (filterChain *filterChain) DmStatementClose(s *DmStatement) error { 214 if filterChain.fpos < len(filterChain.filters) { 215 f := filterChain.filters[filterChain.fpos] 216 filterChain.fpos++ 217 return f.DmStatementClose(filterChain, s) 218 } 219 220 return s.close() 221 } 222 223 func (filterChain *filterChain) DmStatementNumInput(s *DmStatement) int { 224 if filterChain.fpos < len(filterChain.filters) { 225 f := filterChain.filters[filterChain.fpos] 226 filterChain.fpos++ 227 return f.DmStatementNumInput(filterChain, s) 228 } 229 230 return s.numInput() 231 } 232 233 func (filterChain *filterChain) DmStatementExec(s *DmStatement, args []driver.Value) (*DmResult, error) { 234 if filterChain.fpos < len(filterChain.filters) { 235 f := filterChain.filters[filterChain.fpos] 236 filterChain.fpos++ 237 return f.DmStatementExec(filterChain, s, args) 238 } 239 240 return s.exec(args) 241 } 242 243 func (filterChain *filterChain) DmStatementExecContext(s *DmStatement, ctx context.Context, args []driver.NamedValue) (*DmResult, error) { 244 if filterChain.fpos < len(filterChain.filters) { 245 f := filterChain.filters[filterChain.fpos] 246 filterChain.fpos++ 247 return f.DmStatementExecContext(filterChain, s, ctx, args) 248 } 249 250 return s.execContext(ctx, args) 251 } 252 253 func (filterChain *filterChain) DmStatementQuery(s *DmStatement, args []driver.Value) (*DmRows, error) { 254 if filterChain.fpos < len(filterChain.filters) { 255 f := filterChain.filters[filterChain.fpos] 256 filterChain.fpos++ 257 return f.DmStatementQuery(filterChain, s, args) 258 } 259 260 return s.query(args) 261 } 262 263 func (filterChain *filterChain) DmStatementQueryContext(s *DmStatement, ctx context.Context, args []driver.NamedValue) (*DmRows, error) { 264 if filterChain.fpos < len(filterChain.filters) { 265 f := filterChain.filters[filterChain.fpos] 266 filterChain.fpos++ 267 return f.DmStatementQueryContext(filterChain, s, ctx, args) 268 } 269 270 return s.queryContext(ctx, args) 271 } 272 273 func (filterChain *filterChain) DmStatementCheckNamedValue(s *DmStatement, nv *driver.NamedValue) error { 274 if filterChain.fpos < len(filterChain.filters) { 275 f := filterChain.filters[filterChain.fpos] 276 filterChain.fpos++ 277 return f.DmStatementCheckNamedValue(filterChain, s, nv) 278 } 279 280 return s.checkNamedValue(nv) 281 } 282 283 //DmResult 284 func (filterChain *filterChain) DmResultLastInsertId(r *DmResult) (int64, error) { 285 if filterChain.fpos < len(filterChain.filters) { 286 f := filterChain.filters[filterChain.fpos] 287 filterChain.fpos++ 288 return f.DmResultLastInsertId(filterChain, r) 289 } 290 291 return r.lastInsertId() 292 } 293 294 func (filterChain *filterChain) DmResultRowsAffected(r *DmResult) (int64, error) { 295 if filterChain.fpos < len(filterChain.filters) { 296 f := filterChain.filters[filterChain.fpos] 297 filterChain.fpos++ 298 return f.DmResultRowsAffected(filterChain, r) 299 } 300 301 return r.rowsAffected() 302 } 303 304 //DmRows 305 func (filterChain *filterChain) DmRowsColumns(r *DmRows) []string { 306 if filterChain.fpos < len(filterChain.filters) { 307 f := filterChain.filters[filterChain.fpos] 308 filterChain.fpos++ 309 return f.DmRowsColumns(filterChain, r) 310 } 311 312 return r.columns() 313 } 314 315 func (filterChain *filterChain) DmRowsClose(r *DmRows) error { 316 if filterChain.fpos < len(filterChain.filters) { 317 f := filterChain.filters[filterChain.fpos] 318 filterChain.fpos++ 319 return f.DmRowsClose(filterChain, r) 320 } 321 322 return r.close() 323 } 324 325 func (filterChain *filterChain) DmRowsNext(r *DmRows, dest []driver.Value) error { 326 if filterChain.fpos < len(filterChain.filters) { 327 f := filterChain.filters[filterChain.fpos] 328 filterChain.fpos++ 329 return f.DmRowsNext(filterChain, r, dest) 330 } 331 332 return r.next(dest) 333 } 334 335 func (filterChain *filterChain) DmRowsHasNextResultSet(r *DmRows) bool { 336 if filterChain.fpos < len(filterChain.filters) { 337 f := filterChain.filters[filterChain.fpos] 338 filterChain.fpos++ 339 return f.DmRowsHasNextResultSet(filterChain, r) 340 } 341 342 return r.hasNextResultSet() 343 } 344 345 func (filterChain *filterChain) DmRowsNextResultSet(r *DmRows) error { 346 if filterChain.fpos < len(filterChain.filters) { 347 f := filterChain.filters[filterChain.fpos] 348 filterChain.fpos++ 349 return f.DmRowsNextResultSet(filterChain, r) 350 } 351 352 return r.nextResultSet() 353 } 354 355 func (filterChain *filterChain) DmRowsColumnTypeScanType(r *DmRows, index int) reflect.Type { 356 if filterChain.fpos < len(filterChain.filters) { 357 f := filterChain.filters[filterChain.fpos] 358 filterChain.fpos++ 359 return f.DmRowsColumnTypeScanType(filterChain, r, index) 360 } 361 362 return r.columnTypeScanType(index) 363 } 364 365 func (filterChain *filterChain) DmRowsColumnTypeDatabaseTypeName(r *DmRows, index int) string { 366 if filterChain.fpos < len(filterChain.filters) { 367 f := filterChain.filters[filterChain.fpos] 368 filterChain.fpos++ 369 return f.DmRowsColumnTypeDatabaseTypeName(filterChain, r, index) 370 } 371 372 return r.columnTypeDatabaseTypeName(index) 373 } 374 375 func (filterChain *filterChain) DmRowsColumnTypeLength(r *DmRows, index int) (length int64, ok bool) { 376 if filterChain.fpos < len(filterChain.filters) { 377 f := filterChain.filters[filterChain.fpos] 378 filterChain.fpos++ 379 return f.DmRowsColumnTypeLength(filterChain, r, index) 380 } 381 382 return r.columnTypeLength(index) 383 } 384 385 func (filterChain *filterChain) DmRowsColumnTypeNullable(r *DmRows, index int) (nullable, ok bool) { 386 if filterChain.fpos < len(filterChain.filters) { 387 f := filterChain.filters[filterChain.fpos] 388 filterChain.fpos++ 389 return f.DmRowsColumnTypeNullable(filterChain, r, index) 390 } 391 392 return r.columnTypeNullable(index) 393 } 394 395 func (filterChain *filterChain) DmRowsColumnTypePrecisionScale(r *DmRows, index int) (precision, scale int64, ok bool) { 396 if filterChain.fpos < len(filterChain.filters) { 397 f := filterChain.filters[filterChain.fpos] 398 filterChain.fpos++ 399 return f.DmRowsColumnTypePrecisionScale(filterChain, r, index) 400 } 401 402 return r.columnTypePrecisionScale(index) 403 }