pingcap / pingcap/tiflash

Inconsistent cast conversion in Tiflash

Ouverte
#9,653 6 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

affects-8.4 affects-8.5 component/compute impact/inconsistency may-affects-5.4 may-affects-6.1 may-affects-6.5 may-affects-7.1 may-affects-7.5 may-affects-8.1 severity/major type/bug
Langage dominant
C++
Étoiles
1k
Forks
423
Merge moyen
1 j 15 h
PR mergées (30 j)
24

Description

Bug Report

Please answer these questions before submitting your issue. Thanks!

1. Minimal reproduce step (Required)
Drop table if exists test_table;
CREATE TABLE test_table (
    id INT PRIMARY KEY AUTO_INCREMENT,
    col1 VARCHAR(255),
    col2 TINYINT,
    col3 SMALLINT
);

INSERT INTO test_table (col1, col2, col3) VALUES
    ('-9223372036854775809', -128, -32768),
    ('-9223372036854775808', 127, 32767);

ALTER TABLE test_table SET TIFLASH REPLICA 1;

SELECT /*+ READ_FROM_STORAGE(TIKV[test_table])*/
    id,
    col1,
    CAST(col1 AS SIGNED) AS signed_int,
    CAST(col1 AS UNSIGNED) AS unsigned_int,
    CAST(col1 AS DECIMAL(65,30)) AS decimal_value,
    CAST(col1 AS DOUBLE) AS double_value
FROM
    test_table;
    
SELECT /*+ READ_FROM_STORAGE(TIFLASH[test_table])*/
    id,
    col1,
    CAST(col1 AS SIGNED) AS signed_int,
    CAST(col1 AS UNSIGNED) AS unsigned_int,
    CAST(col1 AS DECIMAL(65,30)) AS decimal_value,
    CAST(col1 AS DOUBLE) AS double_value
FROM
    test_table;
2. What did you expect to see? (Required)

I find that unsigned_int is inconsistent across two queries.

3. What did you see instead (Required)
mysql> SELECT /*+ READ_FROM_STORAGE(TIKV[test_table])*/
    ->     id,
    ->     col1,
    ->     CAST(col1 AS SIGNED) AS signed_int,
    ->     CAST(col1 AS UNSIGNED) AS unsigned_int,
    ->     CAST(col1 AS DECIMAL(65,30)) AS decimal_value,
    ->     CAST(col1 AS DOUBLE) AS double_value
    -> FROM
    ->     test_table;
+----+----------------------+----------------------+---------------------+-----------------------------------------------------+-----------------------+
| id | col1                 | signed_int           | unsigned_int        | decimal_value                                       | double_value          |
+----+----------------------+----------------------+---------------------+-----------------------------------------------------+-----------------------+
|  1 | -9223372036854775809 | -9223372036854775808 | 9223372036854775808 | -9223372036854775809.000000000000000000000000000000 | -9.223372036854776e18 |
|  2 | -9223372036854775808 | -9223372036854775808 | 9223372036854775808 | -9223372036854775808.000000000000000000000000000000 | -9.223372036854776e18 |
+----+----------------------+----------------------+---------------------+-----------------------------------------------------+-----------------------+
2 rows in set, 4 warnings (0.01 sec)

mysql> SELECT /*+ READ_FROM_STORAGE(TIFLASH[test_table])*/     id,     col1,     CAST(col1 AS SIGNED) AS signed_int,     CAST(col1 AS UNSIGNED) AS unsigned_int,     CAST(col1 AS DECIMAL(65,30)) AS decimal_value,     CAST(col1 AS DOUBLE) AS double_value FROM
  test_table;
+----+----------------------+----------------------+---------------------+-----------------------------------------------------+-----------------------+
| id | col1                 | signed_int           | unsigned_int        | decimal_value                                       | double_value          |
+----+----------------------+----------------------+---------------------+-----------------------------------------------------+-----------------------+
|  1 | -9223372036854775809 | -9223372036854775808 |                   0 | -9223372036854775809.000000000000000000000000000000 | -9.223372036854776e18 |
|  2 | -9223372036854775808 | -9223372036854775808 | 9223372036854775808 | -9223372036854775808.000000000000000000000000000000 | -9.223372036854776e18 |
+----+----------------------+----------------------+---------------------+-----------------------------------------------------+-----------------------+
2 rows in set (0.01 sec)
4. What is your TiDB version? (Required)

TiDB v8.4.0

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par exécuter la reproduction SQL fournie sur TiDB v8.4.0 et comparez les résultats TIKV et TIFLASH-READ_FROM_STORAGE pour CAST(col1 AS UNSIGNED). Suivez la gestion du cast dans les deux chemins de stockage, en vous concentrant sur les valeurs limites indiquées ; le travail est terminé lorsque les deux requêtes produisent des résultats unsigned_int cohérents.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
cpp, sql
Domaine
databases
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.