コード例 #1
0
ファイル: Table.cs プロジェクト: Etamiin/Inertia
        protected Table()
        {
            var link = GetType().GetCustomAttribute <TableLink>(false);

            if (link != null)
            {
                Identifier = link.TableName;

                if (link.DatabaseType != null && SqlManager.TrySearchDatabase(link.DatabaseType, out Database db))
                {
                    Database = db;
                }

                if (Database == null)
                {
                    throw new ArgumentNullException($"The database isn't registered for table '{ link.TableName }'");
                }
            }
        }
コード例 #2
0
ファイル: Database.cs プロジェクト: Etamiin/Inertia
        /// <summary>
        /// Selects the first element from the specified <see cref="Table"/> with the specified parameters and returns an instance of the <typeparamref name="T"/>.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="columnsToSelect"></param>
        /// <param name="condition"></param>
        /// <param name="distinct"></param>
        /// <returns></returns>
        public T Select <T>(SqlCondition condition, bool distinct, params string[] columnsToSelect) where T : Table
        {
            T table = null;

            ExecuteCommand((cmd) => {
                if (SqlManager.CreateTableInstance(out table))
                {
                    if (condition == null)
                    {
                        condition = new SqlCondition();
                    }

                    condition.Limit(1);

                    var fields = Table.GetFields <T>();

                    cmd.SetQuery(QueryBuilder.GetSelectQuery(table, condition, columnsToSelect, distinct), condition);
                    cmd.OnReader((reader) => {
                        for (var i = 0; i < reader.FieldCount; i++)
                        {
                            var field = fields.FirstOrDefault((f) => f.Name == reader.GetName(i));
                            if (field != null)
                            {
                                object value = null;
                                if (field.FieldType == typeof(bool))
                                {
                                    value = reader.GetBoolean(i);
                                }
                                else if (!reader.IsDBNull(i))
                                {
                                    value = reader.GetValue(i);
                                }

                                field.SetValue(table, value);
                            }
                        }
                    });
                }
            });

            return(table);
        }
コード例 #3
0
ファイル: Database.cs プロジェクト: Etamiin/Inertia
        public T Min <T>(string columnName, SqlCondition condition) where T : Table
        {
            T table = null;

            ExecuteCommand((cmd) => {
                if (SqlManager.CreateTableInstance(out table))
                {
                    cmd.SetQuery(QueryBuilder.GetMinQuery(table, columnName, condition), condition);
                    cmd.OnReader((reader) => {
                        var field = Table.GetFields <T>().FirstOrDefault((f) => f.Name == columnName);
                        if (field != null)
                        {
                            field.SetValue(table, reader.GetValue(0));
                        }
                    });
                }
            });

            return(table);
        }
コード例 #4
0
ファイル: Table.cs プロジェクト: Etamiin/Inertia
 /// <summary>
 /// Insert the current instance values in <see cref="Database"/>
 /// </summary>
 /// <returns></returns>
 public void InsertAsync(BasicAction <long> onResult)
 {
     SqlManager.PoolAsyncOperation(() => {
         onResult(Insert());
     });
 }
コード例 #5
0
ファイル: Table.cs プロジェクト: Etamiin/Inertia
 /// <summary>
 /// Update all elements in the <see cref="Database"/> with current instance's values using the specified <see cref="SqlCondition"/>
 /// </summary>
 /// <param name="condition"></param>
 /// <param name="onUpdated"></param>
 /// <param name="columnsToUpdate"></param>
 public void UpdateAsync(SqlCondition condition, BasicAction <bool> onUpdated, params string[] columnsToUpdate)
 {
     SqlManager.PoolAsyncOperation(() => {
         onUpdated(Update(condition, columnsToUpdate));
     });
 }