| 1268 | } |
| 1269 | |
| 1270 | func TestLongData(t *testing.T) { |
| 1271 | runTests(t, dsn+"&maxAllowedPacket=0", func(dbt *DBTest) { |
| 1272 | var maxAllowedPacketSize int |
| 1273 | err := dbt.db.QueryRow("select @@max_allowed_packet").Scan(&maxAllowedPacketSize) |
| 1274 | if err != nil { |
| 1275 | dbt.Fatal(err) |
| 1276 | } |
| 1277 | maxAllowedPacketSize-- |
| 1278 | |
| 1279 | // don't get too ambitious |
| 1280 | if maxAllowedPacketSize > 1<<25 { |
| 1281 | maxAllowedPacketSize = 1 << 25 |
| 1282 | } |
| 1283 | |
| 1284 | dbt.mustExec("CREATE TABLE test (value LONGBLOB)") |
| 1285 | |
| 1286 | in := strings.Repeat(`a`, maxAllowedPacketSize+1) |
| 1287 | var out string |
| 1288 | var rows *sql.Rows |
| 1289 | |
| 1290 | // Long text data |
| 1291 | inS := in[:maxAllowedPacketSize-100] |
| 1292 | dbt.mustExec("INSERT INTO test VALUES('" + inS + "')") |
| 1293 | rows = dbt.mustQuery("SELECT value FROM test") |
| 1294 | defer rows.Close() |
| 1295 | if rows.Next() { |
| 1296 | rows.Scan(&out) |
| 1297 | if inS != out { |
| 1298 | dbt.Fatalf("LONGBLOB: length in: %d, length out: %d", len(inS), len(out)) |
| 1299 | } |
| 1300 | if rows.Next() { |
| 1301 | dbt.Error("LONGBLOB: unexpected row") |
| 1302 | } |
| 1303 | } else { |
| 1304 | dbt.Fatalf("LONGBLOB: no data") |
| 1305 | } |
| 1306 | |
| 1307 | // Empty table |
| 1308 | dbt.mustExec("TRUNCATE TABLE test") |
| 1309 | |
| 1310 | // Long binary data |
| 1311 | dbt.mustExec("INSERT INTO test VALUES(?)", in) |
| 1312 | rows = dbt.mustQuery("SELECT value FROM test WHERE 1=?", 1) |
| 1313 | defer rows.Close() |
| 1314 | if rows.Next() { |
| 1315 | rows.Scan(&out) |
| 1316 | if in != out { |
| 1317 | dbt.Fatalf("LONGBLOB: length in: %d, length out: %d", len(in), len(out)) |
| 1318 | } |
| 1319 | if rows.Next() { |
| 1320 | dbt.Error("LONGBLOB: unexpected row") |
| 1321 | } |
| 1322 | } else { |
| 1323 | if err = rows.Err(); err != nil { |
| 1324 | dbt.Fatalf("LONGBLOB: no data (err: %s)", err.Error()) |
| 1325 | } else { |
| 1326 | dbt.Fatal("LONGBLOB: no data (err: <nil>)") |
| 1327 | } |