[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: |