Ejemplo n.º 1
0
            public override Task <bool> Read(DataSet.Key key, DataSet.Column column)
            {
                TaskCompletionSource <bool> source = new TaskCompletionSource <bool>();

                source.SetResult(false);
                return(source.Task);
            }
Ejemplo n.º 2
0
 public override async Task <bool> Read(DataSet.Key key, DataSet.Column column)
 {
     if (reader == null)
     {
         reader = await command.ExecuteReaderAsync() as SQLiteDataReader;
     }
     if (!await reader.ReadAsync())
     {
         return(false);
     }
     reader.ReadColumn(define, column, reader.ReadKey(define, key, 0));
     return(true);
 }
Ejemplo n.º 3
0
            public override void Write(DataSet.Define define, DataSet.Key key, DataSet.Column column)
            {
                Remove(define, key);
                string sql = string.Format("INSERT INTO '{0}' ({1}, {2}) VALUES ({3}, {4});", define.Name, define.KeysName(),
                                           define.ColumnsName(), define.KeysValue(), define.ColumnsValue());

                sql = this.BindKeyColumn(define, key, column, sql);
                SQLiteCommand command = Pool <SQLiteCommand> .Default.Acquire();

                command.Connection  = connect;
                command.CommandText = sql;
                for (int i = 0; i < parameters.Count; ++i)
                {
                    command.Parameters.Add(parameters[i]);
                }
                parameters.Clear();
                commands.Add(command);
            }
Ejemplo n.º 4
0
        public static string BindColumn(this Command command, DataSet.Define define, DataSet.Column column, string sql)
        {
            ColumnReplacement replacement = Pool <ColumnReplacement> .Default.Acquire();

            replacement.define = define;
            replacement.column = column;
            string result = ColumnPattern.Replace(sql, replacement.Execute);

            replacement.define = null;
            replacement.column = null;
            Pool <ColumnReplacement> .Default.Release(replacement);

            var columns = define.Columns;

            for (int i = 0; i < columns.Count; ++i)
            {
                var c = columns[i];
                if (c.Value == DataSet.Type.String)
                {
                    string str = null;
                    if (!column.Read(c.Key, ref str))
                    {
                        throw new DataSet.TypeMismatchException();
                    }
                    str = str ?? "";
                    command.AddParam(str);
                }
                else if (c.Value == DataSet.Type.Blob)
                {
                    byte[] bytes = null;
                    if (!column.Read(c.Key, ref bytes))
                    {
                        throw new DataSet.TypeMismatchException();
                    }
                    command.AddParam(bytes);
                }
            }
            return(result);
        }
Ejemplo n.º 5
0
 public override async Task <bool> Read(DataSet.Key key, DataSet.Column column)
 {
     if (reader == null)
     {
         reader = await commands[index].Key.ExecuteReaderAsync() as SQLiteDataReader;
     }
     while (true)
     {
         if (await reader.ReadAsync())
         {
             break;
         }
         ++index;
         if (index >= commands.Count)
         {
             return(false);
         }
         reader.Close();
         reader = await commands[index].Key.ExecuteReaderAsync() as SQLiteDataReader;
     }
     DataSet.Define define = commands[index].Value;
     reader.ReadColumn(define, column, reader.ReadKey(define, key, 0));
     return(true);
 }
Ejemplo n.º 6
0
            public override async Task <bool> Select(DataSet.Define define, DataSet.Key key, DataSet.Column column)
            {
                string sql = string.Format("SELECT {0} FROM '{1}'{2};", define.ColumnsName(), define.Name, define.Where());

                sql = this.BindKey(define, key, sql);
                SQLiteCommand command = Pool <SQLiteCommand> .Default.Acquire();

                command.Connection  = connect;
                command.CommandText = sql;
                for (int i = 0; i < parameters.Count; ++i)
                {
                    command.Parameters.Add(parameters[i]);
                }
                parameters.Clear();
                using (var reader = await command.ExecuteReaderAsync())
                {
                    if (!await reader.ReadAsync())
                    {
                        Pool <SQLiteCommand> .Default.Release(command);

                        return(false);
                    }
                    reader.ReadColumn(define, column);
                }
                Pool <SQLiteCommand> .Default.Release(command);

                return(true);
            }
Ejemplo n.º 7
0
        public static int ReadColumn(this DbDataReader reader, DataSet.Define define, DataSet.Column column, int start = 0)
        {
            int index = start;

            foreach (var kv in define.Columns)
            {
                switch (kv.Value)
                {
                case DataSet.Type.Bool:
                {
                    int result = reader.GetInt32(index);
                    if (!column.Write(kv.Key, result != 0))
                    {
                        throw new DataSet.TypeMismatchException();
                    }
                }
                break;

                case DataSet.Type.Integer:
                {
                    int result = reader.GetInt32(index);
                    if (!column.Write(kv.Key, result))
                    {
                        throw new DataSet.TypeMismatchException();
                    }
                }
                break;

                case DataSet.Type.Long:
                {
                    long result = reader.GetInt64(index);
                    if (!column.Write(kv.Key, result))
                    {
                        throw new DataSet.TypeMismatchException();
                    }
                }
                break;

                case DataSet.Type.Double:
                {
                    double result = reader.GetDouble(index);
                    if (!column.Write(kv.Key, result))
                    {
                        throw new DataSet.TypeMismatchException();
                    }
                }
                break;

                case DataSet.Type.String:
                {
                    string result = reader.GetString(index);
                    if (!column.Write(kv.Key, result ?? ""))
                    {
                        throw new DataSet.TypeMismatchException();
                    }
                }
                break;

                case DataSet.Type.Blob:
                {
                    using (Stream stream = reader.GetStream(index))
                    {
                        int    length = (int)stream.Length;
                        byte[] result = new byte[length];
                        stream.Read(result, 0, length);
                        if (!column.Write(kv.Key, result))
                        {
                            throw new DataSet.TypeMismatchException();
                        }
                    }
                }
                break;
                }
                ++index;
            }
            return(index);
        }