mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-07 02:42:48 +03:00
Create a new affinity called FLEXNUM that works like NUMERIC except that it
never tries to convert integer to real or real to integer. The affinity is only used internally - it is not possible to create a table column with this affinity. This affinity is used on subqueries and views that are built off of a compound SELECT and where the datatype is controlled by a CAST expression. dbsqlfuzz c9ee6f9a0a8b8fefb02cf69de2a8b67ca39525c8 FossilOrigin-Name: 44135d6ea84f7ba6b36549954b38a8bc048d5ffea5a9779e35950afa4eb2dfb2
This commit is contained in:
@@ -371,6 +371,10 @@ static void applyNumericAffinity(Mem *pRec, int bTryForInt){
|
||||
** always preferred, even if the affinity is REAL, because
|
||||
** an integer representation is more space efficient on disk.
|
||||
**
|
||||
** SQLITE_AFF_FLEXNUM:
|
||||
** If the value is text, then try to convert it into a number of
|
||||
** some kind (integer or real) but do not make any other changes.
|
||||
**
|
||||
** SQLITE_AFF_TEXT:
|
||||
** Convert pRec to a text representation.
|
||||
**
|
||||
@@ -385,11 +389,11 @@ static void applyAffinity(
|
||||
){
|
||||
if( affinity>=SQLITE_AFF_NUMERIC ){
|
||||
assert( affinity==SQLITE_AFF_INTEGER || affinity==SQLITE_AFF_REAL
|
||||
|| affinity==SQLITE_AFF_NUMERIC );
|
||||
|| affinity==SQLITE_AFF_NUMERIC || affinity==SQLITE_AFF_FLEXNUM );
|
||||
if( (pRec->flags & MEM_Int)==0 ){ /*OPTIMIZATION-IF-FALSE*/
|
||||
if( (pRec->flags & MEM_Real)==0 ){
|
||||
if( pRec->flags & MEM_Str ) applyNumericAffinity(pRec,1);
|
||||
}else{
|
||||
}else if( affinity<=SQLITE_AFF_REAL ){
|
||||
sqlite3VdbeIntegerAffinity(pRec);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user