@@ -64,120 +64,104 @@ static RANGE_UPPER_INCLUSIVE: i8 = 0b0000_0100;
6464static RANGE_LOWER_INCLUSIVE : i8 = 0b0000_0010 ;
6565static RANGE_EMPTY : i8 = 0b0000_0001 ;
6666
67- /// A Postgres type
68- #[ deriving( Eq ) ]
69- pub enum PostgresType {
70- /// BOOL
71- PgBool ,
72- /// BYTEA
73- PgByteA ,
74- /// "char"
75- PgChar ,
76- /// INT8/BIGINT
77- PgInt8 ,
78- /// INT2/SMALLINT
79- PgInt2 ,
80- /// INT4/INT
81- PgInt4 ,
82- /// TEXT
83- PgText ,
84- /// JSON
85- PgJson ,
86- /// FLOAT4/REAL
87- PgFloat4 ,
88- /// FLOAT8/DOUBLE PRECISION
89- PgFloat8 ,
90- /// BOOL[]
91- PgBoolArray ,
92- /// BYTEA[]
93- PgByteAArray ,
94- /// "char"[]
95- PgCharArray ,
96- /// INT2[]
97- PgInt2Array ,
98- /// INT4[]
99- PgInt4Array ,
100- /// TEXT[]
101- PgTextArray ,
102- /// INT8[]
103- PgInt8Array ,
104- /// FLOAT4[]
105- PgFloat4Array ,
106- /// FLOAT8[]
107- PgFloat8Array ,
108- /// TIMESTAMP
109- PgTimestamp ,
110- /// TIMESTAMP WITH TIME ZONE
111- PgTimestampZ ,
112- /// CHAR(n)/CHARACTER(n)
113- PgCharN ,
114- /// VARCHAR/CHARACTER VARYING
115- PgVarchar ,
116- /// UUID
117- PgUuid ,
118- /// INT4RANGE
119- PgInt4Range ,
120- /// INT8RANGE
121- PgInt8Range ,
122- /// TSRANGE
123- PgTsRange ,
124- /// TSTZRANGE
125- PgTstzRange ,
126- /// An unknown type
127- PgUnknownType {
128- /// The name of the type
129- name : ~str ,
130- /// The OID of the type
131- oid : Oid
132- }
133- }
134-
135- impl PostgresType {
136- #[ doc( hidden) ]
137- pub fn from_oid ( oid : Oid ) -> PostgresType {
138- match oid {
139- BOOLOID => PgBool ,
140- BYTEAOID => PgByteA ,
141- CHAROID => PgChar ,
142- INT8OID => PgInt8 ,
143- INT2OID => PgInt2 ,
144- INT4OID => PgInt4 ,
145- TEXTOID => PgText ,
146- JSONOID => PgJson ,
147- FLOAT4OID => PgFloat4 ,
148- FLOAT8OID => PgFloat8 ,
149- BOOLARRAYOID => PgBoolArray ,
150- BYTEAARRAYOID => PgByteAArray ,
151- CHARARRAYOID => PgCharArray ,
152- INT2ARRAYOID => PgInt2Array ,
153- INT4ARRAYOID => PgInt4Array ,
154- TEXTARRAYOID => PgTextArray ,
155- INT8ARRAYOID => PgInt8Array ,
156- FLOAT4ARRAYOID => PgFloat4Array ,
157- FLAOT8ARRAYOID => PgFloat8Array ,
158- TIMESTAMPOID => PgTimestamp ,
159- TIMESTAMPZOID => PgTimestampZ ,
160- BPCHAROID => PgCharN ,
161- VARCHAROID => PgVarchar ,
162- UUIDOID => PgUuid ,
163- INT4RANGEOID => PgInt4Range ,
164- INT8RANGEOID => PgInt8Range ,
165- TSRANGEOID => PgTsRange ,
166- TSTZRANGEOID => PgTstzRange ,
167- // We have to load an empty string now, it'll get filled in later
168- oid => PgUnknownType { name: ~"", oid : oid }
67+ macro_rules! make_postgres_type(
68+ ( $( $doc: attr $variant: ident => $oid: ident) ,+) => (
69+ /// A Postgres type
70+ #[ deriving( Eq ) ]
71+ pub enum PostgresType {
72+ $(
73+ $doc
74+ $variant,
75+ ) +
76+ /// An unknown type
77+ PgUnknownType {
78+ /// The name of the type
79+ name: ~str ,
80+ /// The OID of the type
81+ oid: Oid
82+ }
16983 }
170- }
17184
172- /// Returns the wire format needed for the value of `self`.
173- pub fn result_format ( & self ) -> Format {
174- match * self {
175- PgUnknownType { name : ~"hstore", .. } => Binary ,
176- PgUnknownType { .. } => Text ,
177- _ => Binary
85+ impl PostgresType {
86+ #[ doc( hidden) ]
87+ pub fn from_oid( oid: Oid ) -> PostgresType {
88+ match oid {
89+ $( $oid => $variant, ) +
90+ // We have to load an empty string now, it'll get filled in later
91+ oid => PgUnknownType { name: ~"", oid: oid }
92+ }
93+ }
94+
95+ /// Returns the wire format needed for the value of `self`.
96+ pub fn result_format( & self ) -> Format {
97+ match * self {
98+ PgUnknownType { name: ~"hstore", .. } => Binary,
99+ PgUnknownType { .. } => Text,
100+ _ => Binary
101+ }
102+ }
178103 }
179- }
180- }
104+ )
105+ )
106+
107+ make_postgres_type!(
108+ #[doc=" BOOL "]
109+ PgBool => BOOLOID,
110+ #[doc=" BYTEA "]
111+ PgByteA => BYTEAOID,
112+ #[doc="\" char\" " ]
113+ PgChar => CHAROID ,
114+ #[ doc="INT8/BIGINT" ]
115+ PgInt8 => INT8OID ,
116+ #[ doc="INT2/SMALLINT" ]
117+ PgInt2 => INT2OID ,
118+ #[ doc="INT4/INT" ]
119+ PgInt4 => INT4OID ,
120+ #[ doc="TEXT" ]
121+ PgText => TEXTOID ,
122+ #[ doc="JSON" ]
123+ PgJson => JSONOID ,
124+ #[ doc="FLOAT4/REAL" ]
125+ PgFloat4 => FLOAT4OID ,
126+ #[ doc="FLOAT8/DOUBLE PRECISION" ]
127+ PgFloat8 => FLOAT8OID ,
128+ #[ doc="BOOL[]" ]
129+ PgBoolArray => BOOLARRAYOID ,
130+ #[ doc="BYTEA[]" ]
131+ PgByteAArray => BYTEAARRAYOID ,
132+ #[ doc="\" char\" []" ]
133+ PgCharArray => CHARARRAYOID ,
134+ #[ doc="INT2[]" ]
135+ PgInt2Array => INT2ARRAYOID ,
136+ #[ doc="INT4[]" ]
137+ PgInt4Array => INT4ARRAYOID ,
138+ #[ doc="TEXT[]" ]
139+ PgTextArray => TEXTARRAYOID ,
140+ #[ doc="INT8[]" ]
141+ PgInt8Array => INT8ARRAYOID ,
142+ #[ doc="FLOAT4[]" ]
143+ PgFloat4Array => FLOAT4ARRAYOID ,
144+ #[ doc="FLOAT8[]" ]
145+ PgFloat8Array => FLAOT8ARRAYOID ,
146+ #[ doc="TIMESTAMP" ]
147+ PgTimestamp => TIMESTAMPOID ,
148+ #[ doc="TIMESTAMP WITH TIME ZONE" ]
149+ PgTimestampZ => TIMESTAMPZOID ,
150+ #[ doc="CHAR(n)/CHARACTER(n)" ]
151+ PgCharN => BPCHAROID ,
152+ #[ doc="VARCHAR/CHARACTER VARYING" ]
153+ PgVarchar => VARCHAROID ,
154+ #[ doc="UUID" ]
155+ PgUuid => UUIDOID ,
156+ #[ doc="INT4RANGE" ]
157+ PgInt4Range => INT4RANGEOID ,
158+ #[ doc="INT8RANGE" ]
159+ PgInt8Range => INT8RANGEOID ,
160+ #[ doc="TSRANGE" ]
161+ PgTsRange => TSRANGEOID ,
162+ #[ doc="TSTZRANGE" ]
163+ PgTstzRange => TSTZRANGEOID
164+ )
181165
182166/// The wire format of a Postgres value
183167pub enum Format {
0 commit comments