MCPcopy Create free account
hub / github.com/ajitpratap0/GoSQLX / TestPoolContamination

Function TestPoolContamination

pkg/sql/parser/negative_parser_test.go:476–589  ·  view source on GitHub ↗

TestPoolContamination verifies that parsing different SQL patterns through pooled parsers doesn't cause cross-contamination between parses.

(t *testing.T)

Source from the content-addressed store, hash-verified

474// TestPoolContamination verifies that parsing different SQL patterns through pooled
475// parsers doesn't cause cross-contamination between parses.
476func TestPoolContamination(t *testing.T) {
477 // Pattern A: simple SELECT
478 tokensA := []token.Token{
479 {Type: models.TokenTypeSelect, Literal: "SELECT"},
480 {Type: models.TokenTypeIdentifier, Literal: "id"},
481 {Type: models.TokenTypeComma, Literal: ","},
482 {Type: models.TokenTypeIdentifier, Literal: "name"},
483 {Type: models.TokenTypeFrom, Literal: "FROM"},
484 {Type: models.TokenTypeIdentifier, Literal: "users"},
485 {Type: models.TokenTypeWhere, Literal: "WHERE"},
486 {Type: models.TokenTypeIdentifier, Literal: "active"},
487 {Type: models.TokenTypeEq, Literal: "="},
488 {Type: models.TokenTypeTrue, Literal: "TRUE"},
489 }
490
491 // Pattern B: INSERT
492 tokensB := []token.Token{
493 {Type: models.TokenTypeInsert, Literal: "INSERT"},
494 {Type: models.TokenTypeInto, Literal: "INTO"},
495 {Type: models.TokenTypeIdentifier, Literal: "orders"},
496 {Type: models.TokenTypeLParen, Literal: "("},
497 {Type: models.TokenTypeIdentifier, Literal: "product"},
498 {Type: models.TokenTypeComma, Literal: ","},
499 {Type: models.TokenTypeIdentifier, Literal: "qty"},
500 {Type: models.TokenTypeRParen, Literal: ")"},
501 {Type: models.TokenTypeValues, Literal: "VALUES"},
502 {Type: models.TokenTypeLParen, Literal: "("},
503 {Type: models.TokenTypeString, Literal: "'widget'"},
504 {Type: models.TokenTypeComma, Literal: ","},
505 {Type: models.TokenTypeNumber, Literal: "42"},
506 {Type: models.TokenTypeRParen, Literal: ")"},
507 }
508
509 // Pattern C: CREATE TABLE
510 tokensC := []token.Token{
511 {Type: models.TokenTypeCreate, Literal: "CREATE"},
512 {Type: models.TokenTypeTable, Literal: "TABLE"},
513 {Type: models.TokenTypeIdentifier, Literal: "products"},
514 {Type: models.TokenTypeLParen, Literal: "("},
515 {Type: models.TokenTypeIdentifier, Literal: "id"},
516 {Type: models.TokenTypeIdentifier, Literal: "INT"},
517 {Type: models.TokenTypeComma, Literal: ","},
518 {Type: models.TokenTypeIdentifier, Literal: "name"},
519 {Type: models.TokenTypeIdentifier, Literal: "TEXT"},
520 {Type: models.TokenTypeRParen, Literal: ")"},
521 }
522
523 // Round 1: Parse A, return parser to pool
524 p1 := GetParser()
525 astA1, errA1 := p1.Parse(tokensA)
526 PutParser(p1)
527
528 // Round 2: Get parser from pool (likely same instance), parse B
529 p2 := GetParser()
530 astB, errB := p2.Parse(tokensB)
531 PutParser(p2)
532
533 // Round 3: Parse C

Callers

nothing calls this directly

Calls 5

GetParserFunction · 0.85
PutParserFunction · 0.85
FatalfMethod · 0.65
TokenLiteralMethod · 0.65
ParseMethod · 0.45

Tested by

no test coverage detected