{
  "python": "3.14.0",
  "sqlite": "3.50.4",
  "scope": "real SQLite, built-in LIKE, in-memory fixture; no performance test",
  "records": [
    [
      1,
      "20%折扣"
    ],
    [
      2,
      "200折扣"
    ],
    [
      3,
      "20_折扣"
    ],
    [
      4,
      "20!折扣"
    ],
    [
      5,
      "O'Reilly"
    ],
    [
      6,
      "ordinary"
    ]
  ],
  "comparisons": [
    {
      "term": "20%",
      "mode": "bound_pattern",
      "bound_value": "%20%%",
      "matched_ids": [
        1,
        2,
        3,
        4
      ]
    },
    {
      "term": "20%",
      "mode": "bound_literal",
      "bound_value": "%20!%%",
      "matched_ids": [
        1
      ]
    },
    {
      "term": "20_",
      "mode": "bound_pattern",
      "bound_value": "%20_%",
      "matched_ids": [
        1,
        2,
        3,
        4
      ]
    },
    {
      "term": "20_",
      "mode": "bound_literal",
      "bound_value": "%20!_%",
      "matched_ids": [
        3
      ]
    },
    {
      "term": "20!",
      "mode": "bound_pattern",
      "bound_value": "%20!%",
      "matched_ids": [
        4
      ]
    },
    {
      "term": "20!",
      "mode": "bound_literal",
      "bound_value": "%20!!%",
      "matched_ids": [
        4
      ]
    },
    {
      "term": "O'Reilly",
      "mode": "bound_pattern",
      "bound_value": "%O'Reilly%",
      "matched_ids": [
        5
      ]
    },
    {
      "term": "O'Reilly",
      "mode": "bound_literal",
      "bound_value": "%O'Reilly%",
      "matched_ids": [
        5
      ]
    },
    {
      "term": "' OR 1=1 --",
      "mode": "bound_pattern",
      "bound_value": "%' OR 1=1 --%",
      "matched_ids": []
    },
    {
      "term": "' OR 1=1 --",
      "mode": "bound_literal",
      "bound_value": "%' OR 1=1 --%",
      "matched_ids": []
    }
  ],
  "ascii_case_match": true,
  "non_ascii_case_match": false,
  "two_character_escape_rejected": true,
  "rejected_terms": [
    "''",
    "'a\\x00b'",
    "None"
  ]
}
PASS: 10 bound-query comparisons, escape validation and explicit input policy
