Exemplo n.º 1
0
 public DatabaseAddinContentModel GetDatabaseContentModel(IDictionary<string, object> dbCommands)
 {
     var model = new DatabaseAddinContentModel();
     if (dbCommands.ContainsKey("Table"))
     {
         var table = GetTableDesc(dbCommands);
         model.Table = table;
     }
     if (dbCommands.ContainsKey("Related"))
     {
         var relatedTable = GetRelatedTableDesc(dbCommands);
         model.Related = relatedTable;
     }
     return model;
 }
Exemplo n.º 2
0
        private void ProcessRelatedTableCommands(IDictionary<string, object> tableRow, DatabaseAddinContentModel dbContentModel)
        {
            var tableModel = dbContentModel.Table;
            var relatedTableModel = dbContentModel.Related;

            if (relatedTableModel != null)
            {
                db.TableName = relatedTableModel.TableName;
                var throughTable = relatedTableModel.Through;

                if (relatedTableModel.Id != null)
                {

                }
                else if (relatedTableModel.Uid != null)
                {
                    var keyName = relatedTableModel.UidName;
                    var keyValue = relatedTableModel.Uid;
                    IEnumerable<dynamic> results = null;

                    if (keyValue.GetType() == typeof(System.Collections.ArrayList))
                    {
                        var whereClause = BuildInClause(keyName, keyValue);
                        results = db.All(where: whereClause, args: keyValue.ToArray(typeof(String)));
                        if (results.Count() != keyValue.Count)
                        {
                            throw new Exception("CompileError: Unknown values in related table.");
                        }
                    }
                    else
                    {
                        results = db.All(where: string.Format("{0} = @0", keyName), args: keyValue);
                    }

                    // Process junction tables
                    if (throughTable != null)
                    {
                        db.TableName = throughTable.TableName;

                        foreach (var result in results)
                        {
                            var resultDict = (IDictionary<string, object>)result;
                            var throughRecord = db.All(
                                        where: string.Format("{0} = @0 and {1} = @1", throughTable.IdName, throughTable.RelatedIdName),
                                        args: new[] { tableRow[tableModel.IdName], resultDict[relatedTableModel.IdName] });

                            if (throughRecord.Count() == 0)
                            {
                                IDictionary<string, object> newObj = new ExpandoObject();
                                newObj[throughTable.IdName] = tableRow[tableModel.IdName];
                                newObj[throughTable.RelatedIdName] = resultDict[relatedTableModel.IdName];
                                db.Insert(newObj);
                            }
                            else if (throughRecord.Count() == 1)
                            {
                                // do nothing
                            }
                            else
                            {
                                throw new Exception("MUltiple records found that match junction table record");
                            }

                        }
                    }
                }

            }
        }
Exemplo n.º 3
0
        private IDictionary<string, object> ProcessTableCommands(DatabaseAddinContentModel dbContentModel)
        {
            var tableModel = dbContentModel.Table;
            if (tableModel != null)
            {
                db.TableName = tableModel.TableName;
                IDictionary<string, object> result = null;

                if (!String.IsNullOrEmpty(tableModel.Id))
                {
                    result = GetOrInsertTable(db, tableModel, tableModel.IdName, tableModel.Id);
                    if (result.ContainsKey("ID"))
                    {
                        result[tableModel.IdName] = result["ID"];
                    }
                    mContentList.Add(result);
                }
                else if (!String.IsNullOrEmpty(dbContentModel.Table.Uid))
                {
                    Console.WriteLine("Table UidValue: {0}", dbContentModel.Table.Uid);
                    result = GetOrInsertTable(db, tableModel, tableModel.UidName, tableModel.Uid);
                    if (result.ContainsKey("ID"))
                    {
                        result[tableModel.IdName] = result["ID"];
                    }
                    mContentList.Add(result);
                }

                // Check for changes to Values
                bool hasChanges = false;
                if (tableModel.Values != null)
                {
                    foreach (var kv in tableModel.Values)
                    {
                        if (result.ContainsKey(kv.Key))
                        {
                            if (!result[kv.Key].Equals(kv.Value))
                            {
                                result[kv.Key] = kv.Value;
                                hasChanges = true;
                            }
                        }
                        else
                        {
                            result.Add(kv.Key, kv.Value);
                            hasChanges = true;
                        }
                    }

                    if (hasChanges)
                    {
                        db.Save(result);
                    }
                }
                return result;
            }
            return null;
        }