DeveelDB  20151217
complete SQL database system, primarly developed for .NET/Mono frameworks
Static Public Member Functions | List of all members
Deveel.Data.Types.TypeSerializer Class Reference

Static Public Member Functions

static void SerializeTo (BinaryWriter writer, SqlType type)
 
static void SerializeTo (Stream stream, SqlType type)
 
static SqlType Deserialize (BinaryReader reader, ITypeResolver resolver)
 
static SqlType Deserialize (Stream stream, ITypeResolver typeResolver)
 

Detailed Description

Definition at line 25 of file TypeSerializer.cs.

Member Function Documentation

static SqlType Deveel.Data.Types.TypeSerializer.Deserialize ( BinaryReader  reader,
ITypeResolver  resolver 
)
inlinestatic

Definition at line 75 of file TypeSerializer.cs.

75  {
76 
77  var typeCode = (SqlTypeCode)reader.ReadByte();
78 
79  if (BooleanType.IsBooleanType(typeCode))
80  return PrimitiveTypes.Boolean(typeCode);
81  if (IntervalType.IsIntervalType(typeCode))
82  return PrimitiveTypes.Interval(typeCode);
83  if (DateType.IsDateType(typeCode))
84  return PrimitiveTypes.DateTime(typeCode);
85 
86  if (StringType.IsStringType(typeCode)) {
87  var maxSize = reader.ReadInt32();
88 
89  CultureInfo locale = null;
90  var hasLocale = reader.ReadByte() == 1;
91  if (hasLocale) {
92  var name = reader.ReadString();
93  locale = new CultureInfo(name);
94  }
95 
96  // TODO: Get the encoding from the serialization...
97  return PrimitiveTypes.String(typeCode, maxSize, Encoding.Unicode, locale);
98  }
99 
100  if (NumericType.IsNumericType(typeCode)) {
101  var size = reader.ReadInt32();
102  var scale = reader.ReadByte();
103 
104  return PrimitiveTypes.Numeric(typeCode, size, scale);
105  }
106 
107  if (BinaryType.IsBinaryType(typeCode)) {
108  var size = reader.ReadInt32();
109  return PrimitiveTypes.Binary(typeCode, size);
110  }
111 
112  if (typeCode == SqlTypeCode.Type) {
113  // TODO:
114  }
115 
116  if (typeCode == SqlTypeCode.QueryPlan)
117  return new QueryType();
118 
119  if (typeCode == SqlTypeCode.Array) {
120  var size = reader.ReadInt32();
121  return new ArrayType(size);
122  }
123 
124  if (typeCode == SqlTypeCode.Null)
125  return PrimitiveTypes.Null();
126 
127  throw new NotSupportedException();
128  }
SqlTypeCode
Enumerates the codes of all SQL types handled by the system.
Definition: SqlTypeCode.cs:23
static SqlType Deveel.Data.Types.TypeSerializer.Deserialize ( Stream  stream,
ITypeResolver  typeResolver 
)
inlinestatic

Definition at line 130 of file TypeSerializer.cs.

130  {
131  var reader = new BinaryReader(stream, Encoding.Unicode);
132  return Deserialize(reader, typeResolver);
133  }
static SqlType Deserialize(BinaryReader reader, ITypeResolver resolver)
static void Deveel.Data.Types.TypeSerializer.SerializeTo ( BinaryWriter  writer,
SqlType  type 
)
inlinestatic

Definition at line 26 of file TypeSerializer.cs.

26  {
27  writer.Write((byte) type.TypeCode);
28 
29  if (type.IsPrimitive) {
30  if (type is NumericType) {
31  var numericType = (NumericType) type;
32  writer.Write(numericType.Size);
33  writer.Write(numericType.Scale);
34  } else if (type is StringType) {
35  var stringType = (StringType) type;
36  writer.Write(stringType.MaxSize);
37 
38  if (stringType.Locale != null) {
39  writer.Write((byte) 1);
40  writer.Write(stringType.Locale.Name);
41  } else {
42  writer.Write((byte) 0);
43  }
44  } else if (type is BinaryType) {
45  var binaryType = (BinaryType) type;
46 
47  writer.Write(binaryType.MaxSize);
48  } else if (type is BooleanType ||
49  type is IntervalType ||
50  type is DateType ||
51  type is NullType) {
52  // nothing to add to the SQL Type Code
53  } else {
54  throw new NotSupportedException(String.Format("The data type '{0}' cannot be serialized.", type.GetType().FullName));
55  }
56  } else if (type is UserType) {
57  var userType = (UserType) type;
58  writer.Write((byte) 1); // The code of custom type
59  writer.Write(userType.FullName.FullName);
60  } else if (type is QueryType) {
61  // nothing to do for the Query Type here
62  } else if (type is ArrayType) {
63  var arrayType = (ArrayType) type;
64  writer.Write(arrayType.Length);
65  } else {
66  throw new NotSupportedException();
67  }
68  }
A long string in the system.
static void Deveel.Data.Types.TypeSerializer.SerializeTo ( Stream  stream,
SqlType  type 
)
inlinestatic

Definition at line 70 of file TypeSerializer.cs.

70  {
71  var writer = new BinaryWriter(stream, Encoding.Unicode);
72  SerializeTo(writer, type);
73  }
static void SerializeTo(BinaryWriter writer, SqlType type)

The documentation for this class was generated from the following file: