Difference between revisions of "MonetDB type system"

From MonetDB
Jump to navigationJump to search
Line 8: Line 8:
 
|+ MonetDB type system
 
|+ MonetDB type system
 
|-
 
|-
! semantics                            !! SQL          !! MAL  !! C  !! width <br> [byte] ([bit]) !! signed? !! NIL value                   !! min value                                                 !! max value                                                !! format string              !! format cast !! availability                                              !! C example                                                                 
+
! semantics                            !! SQL          !! MAL  !! C  !! width               !! signed? !! NIL value                     !! value range                                                                                                      !! format string              !! format cast !! availability                                              !! C example                                                                 
 
|-
 
|-
| 1-byte  (8-bit) <br> signed integer || TINYINT       || :bte || bte ||  1  (8)                  || yes     || bte_nil == <br> GDK_bte_min || GDK_bte_min <br>                                     -128 || GDK_bte_max <br>                                    127 || "%hhd"                      ||            || always                                                    ||                  bte x = 0; <br> printf("%hhd", x);                       
+
| bit / boolean <br> (0/1 / false/true) || BOOLEAN       || :bit || bit ||  1 byte <br>   8 bit || (yes|| bit_nil == <br> (bit) bte_nil || ]GDK_bit_min:GDK_bit_max] <br>                                       ]0:1]                                      || "%hhd"                      ||            || always                                                    ||                  bit x = 0; <br> printf("%hhd", x);                       
 
|-
 
|-
2-byte (16-bit) <br> signed integer || SMALLINT      || :sht || sht ||  2  (16)                  || yes    || sht_nil == <br> GDK_sht_min || GDK_sht_min <br>                                   -65536 || GDK_sht_max <br>                                  65535 || "%hd"                      ||            || always                                                    ||                  sht x = 0; <br> printf( "%hd", x);                       
+
1-byte   (8-bit) <br> signed integer || TINYINT      || :bte || bte ||  1 byte <br>  8 bit || yes    || bte_nil == <br> GDK_bte_min  || ]GDK_bte_min:GDK_bte_max] <br>                                     ]-128:127]                                    || "%hhd"                      ||            || always                                                    ||                  bte x = 0; <br> printf("%hhd", x);                       
 
|-
 
|-
4-byte  (32-bit) <br> signed integer || INT / INTEGER || :int || int ||  4 (32)                  || yes    || int_nil == <br> GDK_int_min || GDK_int_min <br>                             -2147483648 || GDK_int_max <br>                              2147483647 ||  "%d"                      ||            || always                                                    ||                  int x = 0; <br> printf( "%d", x);                       
+
2-byte  (16-bit) <br> signed integer || SMALLINT      || :sht || sht ||  2 byte <br> 16 bit || yes    || sht_nil == <br> GDK_sht_min  || ]GDK_sht_min:GDK_sht_max] <br>                                   ]-65536:65535]                                  || "%hd"                      ||            || always                                                    ||                  sht x = 0; <br> printf( "%hd", x);                       
 
|-
 
|-
8-byte  (64-bit) <br> signed integer || BIGINT        || :lng || lng ||  8 (64)                  || yes    || lng_nil == <br> GDK_lng_min || GDK_lng_min <br>                     -9223372036854775808 || GDK_lng_max <br>                    9223372036854775807 || LLFMT                      ||            || always                                                    ||                  lng x = 0; <br> printf(LLFMT , x);                       
+
4-byte  (32-bit) <br> signed integer || INT / INTEGER || :int || int ||  4 byte <br> 32 bit || yes    || int_nil == <br> GDK_int_min  || ]GDK_int_min:GDK_int_max] <br>                             ]-2147483648:2147483647]                              ||   "%d"                      ||            || always                                                    ||                  int x = 0; <br> printf( "%d", x);                       
 
|-
 
|-
| 16-byte (128-bit) <br> signed integer || HUGEINT      || :hge || hge || 16 (128)                  || yes    || hge_nil == <br> GDK_hge_min || GDK_hge_min <br> -170141183460469231731687303715884105728 || GDK_hge_max <br> 170141183460469231731687303715884105727 || (none provide by compilers) ||            || if supported by compiler <br> (configure then defines HAVE_HGE) || #ifdef HAVE_HGE <br> hge x = 0; <br> printf("%.40g", (dbl) x); <br> #endif
+
|  8-byte  (64-bit) <br> signed integer || BIGINT        || :lng || lng ||  8 byte <br>  64 bit || yes    || lng_nil == <br> GDK_lng_min  || ]GDK_lng_min:GDK_lng_max] <br>                    ]-9223372036854775808:9223372036854775807]                    || LLFMT                      ||            || always                                                    ||                  lng x = 0; <br> printf(LLFMT , x);                     
 +
|-
 +
| 16-byte (128-bit) <br> signed integer || HUGEINT      || :hge || hge || 16 byte <br> 128 bit || yes    || hge_nil == <br> GDK_hge_min   || ]GDK_hge_min:GDK_hge_max] <br> ]-170141183460469231731687303715884105728:170141183460469231731687303715884105727] || (none provide by compilers) ||            || if supported by compiler <br> (configure then defines HAVE_HGE) || #ifdef HAVE_HGE <br> hge x = 0; <br> printf("%.40g", (dbl) x); <br> #endif
 
|}
 
|}
  
 
... to be continued ...
 
... to be continued ...

Revision as of 21:05, 6 October 2015

  • Rule #1
    • C types long & unsigned long are evil and must NOT be used!
      While they are 32/64-bit on 32/64-bit systems under Unix, they are always 32-bit (also on 64-bit systems) under Windows.
  • Rule #2
    • monetdb_config.h must be the first #include in each .c file (not in any .h file).
MonetDB type system
semantics SQL MAL C width signed? NIL value value range format string format cast availability C example
bit / boolean
(0/1 / false/true)
BOOLEAN :bit bit 1 byte
8 bit
(yes) bit_nil ==
(bit) bte_nil
]GDK_bit_min:GDK_bit_max]
]0:1]
"%hhd" always bit x = 0;
printf("%hhd", x);
1-byte (8-bit)
signed integer
TINYINT :bte bte 1 byte
8 bit
yes bte_nil ==
GDK_bte_min
]GDK_bte_min:GDK_bte_max]
]-128:127]
"%hhd" always bte x = 0;
printf("%hhd", x);
2-byte (16-bit)
signed integer
SMALLINT :sht sht 2 byte
16 bit
yes sht_nil ==
GDK_sht_min
]GDK_sht_min:GDK_sht_max]
]-65536:65535]
"%hd" always sht x = 0;
printf( "%hd", x);
4-byte (32-bit)
signed integer
INT / INTEGER :int int 4 byte
32 bit
yes int_nil ==
GDK_int_min
]GDK_int_min:GDK_int_max]
]-2147483648:2147483647]
"%d" always int x = 0;
printf( "%d", x);
8-byte (64-bit)
signed integer
BIGINT :lng lng 8 byte
64 bit
yes lng_nil ==
GDK_lng_min
]GDK_lng_min:GDK_lng_max]
]-9223372036854775808:9223372036854775807]
LLFMT always lng x = 0;
printf(LLFMT , x);
16-byte (128-bit)
signed integer
HUGEINT :hge hge 16 byte
128 bit
yes hge_nil ==
GDK_hge_min
]GDK_hge_min:GDK_hge_max]
]-170141183460469231731687303715884105728:170141183460469231731687303715884105727]
(none provide by compilers) if supported by compiler
(configure then defines HAVE_HGE)
#ifdef HAVE_HGE
hge x = 0;
printf("%.40g", (dbl) x);
#endif

... to be continued ...