[pgsqlclient-checkins] pgsqlclient_10/PostgreSql.Data.PgSqlClient/source/NPgClient PgDbClient.cs,1.2
Status: Inactive
Brought to you by:
carlosga_fb
|
From: <car...@us...> - 2003-10-19 15:08:39
|
Update of /cvsroot/pgsqlclient/pgsqlclient_10/PostgreSql.Data.PgSqlClient/source/NPgClient
In directory sc8-pr-cvs1:/tmp/cvs-serv20171
Modified Files:
PgDbClient.cs PgResponsePacket.cs PgType.cs
Log Message:
- Added support for unidimensional arrays of Geometric Types.
- Addes upport for boolean arrays.
Index: PgDbClient.cs
===================================================================
RCS file: /cvsroot/pgsqlclient/pgsqlclient_10/PostgreSql.Data.PgSqlClient/source/NPgClient/PgDbClient.cs,v
retrieving revision 1.26
retrieving revision 1.27
diff -C2 -d -r1.26 -r1.27
*** PgDbClient.cs 18 Oct 2003 19:14:43 -0000 1.26
--- PgDbClient.cs 19 Oct 2003 14:08:22 -0000 1.27
***************
*** 677,680 ****
--- 677,681 ----
types.Add(829 , "macaddr" , PgDataType.VarChar , 0, 0, 6);
types.Add(869 , "inet" , PgDataType.VarChar , 0, 0, 0);
+ types.Add(1000 , "_bool" , PgDataType.Array , 16, 1, 1);
types.Add(1005 , "_int2" , PgDataType.Array , 21, 1, 2);
types.Add(1007 , "_int4" , PgDataType.Array , 23, 1, 4);
Index: PgResponsePacket.cs
===================================================================
RCS file: /cvsroot/pgsqlclient/pgsqlclient_10/PostgreSql.Data.PgSqlClient/source/NPgClient/PgResponsePacket.cs,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -d -r1.13 -r1.14
*** PgResponsePacket.cs 18 Oct 2003 14:46:26 -0000 1.13
--- PgResponsePacket.cs 19 Oct 2003 14:08:22 -0000 1.14
***************
*** 149,164 ****
}
! public int ReadInt()
{
! int val = base.ReadInt32();
return IPAddress.HostToNetworkOrder(val);
}
! public short ReadShort()
{
! short val = base.ReadInt16();
! return IPAddress.HostToNetworkOrder(val);
}
--- 149,164 ----
}
! public short ReadShort()
{
! short val = base.ReadInt16();
return IPAddress.HostToNetworkOrder(val);
}
! public int ReadInt()
{
! int val = base.ReadInt32();
! return IPAddress.HostToNetworkOrder(val);
}
***************
*** 224,283 ****
}
! public Array ReadPrimitiveArray(PgType type, int length)
{
! PgType elementType = type;
! Array data = null;
!
! int[] lengths;
! int[] lowerBounds;
!
! // Read te number of dimensions
! int ndims = ReadInt();
!
! lengths = new int[ndims];
! lowerBounds = new int[ndims];
!
! int flags = ReadInt();
! if (flags != 0)
{
! throw new NotSupportedException("Invalid flags value");
}
! // Read array element type
! elementType = PgDbClient.Types[ReadInt()];
! // Read array lengths and lower bounds
! for (int i = 0; i < ndims; i++)
{
! lengths[i] = ReadInt();
! lowerBounds[i] = ReadInt();
! }
!
! data = Array.CreateInstance(elementType.SystemType, lengths, lowerBounds);
!
! // Read array data
! byte[] sourceArray = decodeArrayData(elementType, data.Length, length);
!
! Buffer.BlockCopy(sourceArray, 0, data, 0, sourceArray.Length);
!
! return data;
! }
!
! public Array ReadStringArray(PgType type, int length)
! {
! PgType elementType = PgDbClient.Types[type.ElementType];
! Array data = null;
! string contents = ReadString(length);
! contents = contents.Substring(1, contents.Length - 2);
! string[] elements = contents.Split(',');
! data = Array.CreateInstance(elementType.SystemType, elements.Length);
! for (int i = 0; i < elements.Length; i++)
! {
! data.SetValue(elements[i], i);
}
-
- return data;
}
--- 224,274 ----
}
! public Array ReadArray(PgType type, int length)
{
! if (type.FormatCode == 0)
{
! return this.readStringArray(type, length);
}
! else
{
! int[] lengths;
! int[] lowerBounds;
! // Read number of dimensions
! int dimensions = this.ReadInt();
!
! // Initialize arrays for lengths and lower bounds
! lengths = new int[dimensions];
! lowerBounds = new int[dimensions];
! // Read flags value
! int flags = this.ReadInt();
! if (flags != 0)
! {
! throw new NotSupportedException("Invalid flags value");
! }
!
! // Read array element type
! PgType elementType = PgDbClient.Types[this.ReadInt()];
! // Read array lengths and lower bounds
! for (int i = 0; i < dimensions; i++)
! {
! lengths[i] = this.ReadInt();
! lowerBounds[i] = this.ReadInt();
! }
! // Read Array data
! if (type.SystemType.IsPrimitive)
! {
! return this.readPrimitiveArray(elementType, length,
! dimensions, flags, lengths, lowerBounds);
! }
! else
! {
! return this.readNonPrimitiveArray(elementType, length,
! dimensions, flags, lengths, lowerBounds);
! }
}
}
***************
*** 353,357 ****
}
! // Common read method
public object ReadValue(PgType type, int length)
--- 344,350 ----
}
! #endregion
!
! #region READ_VALUE
public object ReadValue(PgType type, int length)
***************
*** 360,371 ****
{
case PgDataType.Array:
! if (type.FormatCode == 0)
! {
! return this.ReadStringArray(type, length);
! }
! else
! {
! return this.ReadPrimitiveArray(type, length);
! }
case PgDataType.Vector:
--- 353,357 ----
{
case PgDataType.Array:
! return this.ReadArray(type, length);
case PgDataType.Vector:
***************
*** 444,448 ****
#endregion
! #region PRIVATE_METHODS
private byte[] decodeArrayData(PgType type, int elementCount, int length)
--- 430,481 ----
#endregion
! #region ARRAY_METHODS
!
! private Array readPrimitiveArray(PgType elementType, int length,
! int dimensions, int flags, int[] lengths, int[] lowerBounds)
! {
! Array data = Array.CreateInstance(elementType.SystemType, lengths, lowerBounds);
!
! // Read array data
! byte[] sourceArray = decodeArrayData(elementType, data.Length, length);
!
! Buffer.BlockCopy(sourceArray, 0, data, 0, sourceArray.Length);
!
! return data;
! }
!
! private Array readNonPrimitiveArray(PgType elementType, int length,
! int dimensions, int flags, int[] lengths, int[] lowerBounds)
! {
! Array data = Array.CreateInstance(elementType.SystemType, lengths, lowerBounds);
!
! for (int i = data.GetLowerBound(0); i <= data.GetUpperBound(0); i++)
! {
! int elementLen = this.ReadInt();
! data.SetValue(this.ReadValue(elementType, elementType.Size), i);
! }
!
! return data;
! }
!
! private Array readStringArray(PgType type, int length)
! {
! PgType elementType = PgDbClient.Types[type.ElementType];
! Array data = null;
!
! string contents = ReadString(length);
! contents = contents.Substring(1, contents.Length - 2);
!
! string[] elements = contents.Split(',');
!
! data = Array.CreateInstance(elementType.SystemType, elements.Length);
!
! for (int i = 0; i < elements.Length; i++)
! {
! data.SetValue(elements[i], i);
! }
!
! return data;
! }
private byte[] decodeArrayData(PgType type, int elementCount, int length)
***************
*** 453,488 ****
int index = 0;
while (element < elementCount)
! {
byte[] elementData = null;
! int elementLen = ReadInt();
switch (type.DataType)
{
case PgDataType.Boolean:
! elementData = BitConverter.GetBytes(ReadBoolean());
! break;
!
! case PgDataType.Byte:
! elementData = BitConverter.GetBytes(ReadByte());
break;
case PgDataType.Float:
! elementData = BitConverter.GetBytes(ReadSingle());
break;
case PgDataType.Double:
! elementData = BitConverter.GetBytes(ReadDouble());
break;
case PgDataType.Int2:
! elementData = BitConverter.GetBytes(ReadShort());
break;
case PgDataType.Int4:
! elementData = BitConverter.GetBytes(ReadInt());
break;
case PgDataType.Int8:
! elementData = BitConverter.GetBytes(ReadLong());
break;
}
--- 486,517 ----
int index = 0;
while (element < elementCount)
! {
byte[] elementData = null;
! int elementLen = this.ReadInt();
switch (type.DataType)
{
case PgDataType.Boolean:
! elementData = BitConverter.GetBytes(this.ReadBoolean());
break;
case PgDataType.Float:
! elementData = BitConverter.GetBytes(this.ReadSingle());
break;
case PgDataType.Double:
! elementData = BitConverter.GetBytes(this.ReadDouble());
break;
case PgDataType.Int2:
! elementData = BitConverter.GetBytes(this.ReadShort());
break;
case PgDataType.Int4:
! elementData = BitConverter.GetBytes(this.ReadInt());
break;
case PgDataType.Int8:
! elementData = BitConverter.GetBytes(this.ReadLong());
break;
}
Index: PgType.cs
===================================================================
RCS file: /cvsroot/pgsqlclient/pgsqlclient_10/PostgreSql.Data.PgSqlClient/source/NPgClient/PgType.cs,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** PgType.cs 18 Oct 2003 19:14:43 -0000 1.6
--- PgType.cs 19 Oct 2003 14:08:22 -0000 1.7
***************
*** 150,160 ****
case PgDataType.Box:
case PgDataType.Circle:
case PgDataType.Line:
case PgDataType.LSeg:
case PgDataType.Path:
case PgDataType.Point:
case PgDataType.Polygon:
! return Type.GetType("System.Object");
case PgDataType.Byte:
--- 150,172 ----
case PgDataType.Box:
+ return Type.GetType("PostgreSql.Data.PgTypes.PgBox");
+
case PgDataType.Circle:
+ return Type.GetType("PostgreSql.Data.PgTypes.PgCircle");
+
case PgDataType.Line:
+ return Type.GetType("PostgreSql.Data.PgTypes.PgLine");
+
case PgDataType.LSeg:
+ return Type.GetType("PostgreSql.Data.PgTypes.PgLSeg");
+
case PgDataType.Path:
+ return Type.GetType("PostgreSql.Data.PgTypes.PgPath");
+
case PgDataType.Point:
+ return Type.GetType("PostgreSql.Data.PgTypes.PgPoint");
+
case PgDataType.Polygon:
! return Type.GetType("PostgreSql.Data.PgTypes.PgPolygon");
case PgDataType.Byte:
|