Skip to content

Latest commit

 

History

History
90 lines (65 loc) · 2.3 KB

README.md

File metadata and controls

90 lines (65 loc) · 2.3 KB

CI

pg-saturated_int

An integer type with saturation arithmetic. The difference from builtin integer type is that if an input value is out of allowed range then the error integer out of range won't be raised.

Types

saturated_int

saturated_int is an integer type which implements saturation arithmetic. Allowed range is -2147483648 to +2147483647.

-- Cast to saturated_int

select 999999999999999::saturated_int;
 saturated_int 
---------------
 2147483647

select 2147483648::saturated_int;
 saturated_int 
---------------
 2147483647

select (-2147483649)::saturated_int;
 saturated_int 
---------------
 -2147483648

Supported operators

saturated_int supports comparison (<, <=, <>, =, >, >=) and arithmetic operators. Here is some examples:

select 999999999999999::saturated_int > 2147483648::saturated_int;
 ?column? 
----------
 f

select 999999999999999::saturated_int = 2147483648::saturated_int;
 ?column? 
----------
 t

select 999999999999999::saturated_int * 2147483648::saturated_int;
  ?column?  
------------
 2147483647

select (-999999999999999)::saturated_int * 2147483648::saturated_int;
  ?column?   
-------------
 -2147483648

select 2147483648::saturated_int / (-1)::saturated_int;
  ?column?   
-------------
 -2147483647

Note that it is necessary to explicitly cast both of operands to saturated_int. Implicit cast isn't supported:

select 2147483647::int = 2147483648::saturated_int;
ERROR:  operator does not exist: integer = saturated_int at character 24

select 2147483647::int * 2147483648::saturated_int;
ERROR:  operator does not exist: integer * saturated_int at character 24

Index support

The extension supports btree and hash indexes.

Installation from source codes

To install saturated_int, execute this in the extension's directory:

make install

Notice: Don't forget to set the PG_CONFIG variable (make PG_CONFIG=...) in case you want to test saturated_int on a non-default or custom build of PostgreSQL. Read more here.