Exemplo n.º 1
0
 private void CloneKeySchema(IEnumerable <KeySchemaElement> sourceSchema)
 {
     KeySchema.AddRange(sourceSchema.Select(key => new KeySchemaElement
     {
         AttributeName = new string(key.AttributeName.ToCharArray()),
         KeyType       = new DynamoDBv2.KeyType(key.KeyType)
     }));
 }
        protected string ParseKey(KeySchema key)
        {
            var stat = new StringBuilder();

            switch (key.KeyType)
            {
            case ConstraintType.KeyForeign:
                stat.AppendFormat(@"FOREIGN KEY ({0}) REFERENCES {1}",
                                  ParseColumnListIndex(key.Columns).JoinStrings(),
                                  MakeDdlElementName(key.RelTable));

                if (!string.IsNullOrEmpty(key.RelColumns))
                {
                    stat.AppendFormat(@" ({0})", ParseColumnListIndex(key.RelColumns).JoinStrings());
                }

                switch (key.DeleteRule)
                {
                case LinkRule.Cascade:
                    stat.Append(@" ON DELETE CASCADE");
                    break;

                case LinkRule.SetNull:
                    stat.Append(@" ON DELETE SET NULL");
                    break;
                }
                switch (key.UpdateRule)
                {
                case LinkRule.Cascade:
                    stat.Append(@" ON UPDATE CASCADE");
                    break;

                case LinkRule.SetNull:
                    stat.Append(@" ON UPDATE SET NULL");
                    break;
                }
                break;

            case ConstraintType.KeyPrimary:
                //TODO проверить на DB отличных от MS SQL
                stat.AppendFormat(@"PRIMARY KEY ({0})", ParseColumnListIndex(key.Columns).JoinStrings(@","));
                break;

            case ConstraintType.Unique:
                stat.AppendFormat(@"UNIQUE ({0})", ParseColumnListIndex(key.Columns).JoinStrings());
                break;

            case ConstraintType.Check:
                stat.AppendFormat(@"CHECK ({0})", key.Source);
                break;

            case ConstraintType.Default:
                stat.AppendFormat(@"DEFAULT {0} FOR {1}", key.Source, key.Columns);
                break;
            }
            return(stat.ToString());
        }
Exemplo n.º 3
0
        private static List <KeySchema> GetKeys(Table xTable)
        {
            var keys = new List <KeySchema>();

            for (var j = 0; j < xTable.Keys.Count; j++)
            {
                var xKey = xTable.Keys[j];

                var cols  = new StringBuilder();
                var rcols = new StringBuilder();

                for (var k = 0; k < xKey.Columns.Count; k++)
                {
                    cols.Append(xKey.Columns[k].Name);
                    cols.Append(k == xKey.Columns.Count - 1 ? string.Empty : ", ");
                }

                var key = new KeySchema
                {
                    Name       = xKey.Name,
                    RelTable   = xKey.RelatedTable,
                    DeleteRule = GetDbsmRule(xKey.DeleteRule),
                    UpdateRule = GetDbsmRule(xKey.UpdateRule)
                };

                switch (xKey.Type)
                {
                case KeyTypeEnum.adKeyPrimary:
                    key.KeyType = ConstraintType.KeyPrimary;
                    break;

                case KeyTypeEnum.adKeyForeign:
                    for (var k = 0; k < xKey.Columns.Count; k++)
                    {
                        rcols.Append(xKey.Columns[k].RelatedColumn);
                        rcols.Append(k == xKey.Columns.Count - 1 ? string.Empty : ", ");
                    }
                    key.KeyType = ConstraintType.KeyForeign;
                    break;

                case KeyTypeEnum.adKeyUnique:
                    key.KeyType = ConstraintType.Unique;
                    break;
                }
                key.Columns    = cols.ToString();
                key.RelColumns = rcols.Length != 0 ? rcols.ToString() : null;

                keys.Add(key);
            }

            return(keys);
        }
Exemplo n.º 4
0
        public T FindBy(KeySchema primaryKey, out int index)
        {
            index = -1;
            if (0 == this.recordList.Count)
            {
                return(null);
            }
            int id     = primaryKey.GetId();
            T   record = this.FindBy(id, out index);

            if (null != record && record.primaryKey == primaryKey)
            {
                return(record);
            }
            return(null);
        }
Exemplo n.º 5
0
        internal void AddKey(string keyName, string keyType, string dataType)
        {
            var keyElement = KeySchema.FirstOrDefault(key => key.AttributeName.Equals(keyName, StringComparison.OrdinalIgnoreCase));

            if (keyElement != null)
            {
                throw new ArgumentException(string.Format("A key with name '{0}' has already been defined in the schema.", keyName), "KeyName");
            }

            // if the key doesn't already exist as an attribute, add it
            var attribute = AttributeSchema.FirstOrDefault(a => a.AttributeName.Equals(keyName, StringComparison.OrdinalIgnoreCase));

            if (attribute == null)
            {
                if (string.IsNullOrEmpty(dataType))
                {
                    throw new ArgumentException("An attribute for the key was not found in the supplied schema. The data type is needed before it can be added automatically.", "DataType");
                }

                AttributeSchema.Add(new AttributeDefinition {
                    AttributeName = keyName, AttributeType = dataType
                });
            }

            keyElement = new KeySchemaElement
            {
                AttributeName = keyName,
                KeyType       = keyType
            };

            // allow for user possibly defining keys in any order; DDB requires the primary hash key to be first
            // and there may be multiple hash keys allowed in future.
            if (!HasDefinedKeys || keyType.Equals(Amazon.DynamoDBv2.KeyType.RANGE, StringComparison.OrdinalIgnoreCase))
            {
                KeySchema.Add(keyElement);
            }
            else if (KeySchema[0].KeyType.Equals(Amazon.DynamoDBv2.KeyType.HASH))
            {
                KeySchema.Add(keyElement);
            }
            else
            {
                KeySchema.Insert(0, keyElement);
            }
        }
Exemplo n.º 6
0
        public IRequest Marshall(CreateTableRequest createTableRequest)
        {
            IRequest request = new DefaultRequest(createTableRequest, "AmazonDynamoDB");
            string   target  = "DynamoDB_20111205.CreateTable";

            request.Headers["X-Amz-Target"] = target;
            request.Headers["Content-Type"] = "application/x-amz-json-1.0";

            using (StringWriter stringWriter = new StringWriter())
            {
                JsonWriter writer = new JsonWriter(stringWriter);
                writer.WriteObjectStart();

                if (createTableRequest != null && createTableRequest.IsSetTableName())
                {
                    writer.WritePropertyName("TableName");
                    writer.Write(createTableRequest.TableName);
                }

                if (createTableRequest != null)
                {
                    KeySchema keySchema = createTableRequest.KeySchema;
                    if (keySchema != null)
                    {
                        writer.WritePropertyName("KeySchema");
                        writer.WriteObjectStart();

                        if (keySchema != null)
                        {
                            KeySchemaElement hashKeyElement = keySchema.HashKeyElement;
                            if (hashKeyElement != null)
                            {
                                writer.WritePropertyName("HashKeyElement");
                                writer.WriteObjectStart();
                                if (hashKeyElement != null && hashKeyElement.IsSetAttributeName())
                                {
                                    writer.WritePropertyName("AttributeName");
                                    writer.Write(hashKeyElement.AttributeName);
                                }
                                if (hashKeyElement != null && hashKeyElement.IsSetAttributeType())
                                {
                                    writer.WritePropertyName("AttributeType");
                                    writer.Write(hashKeyElement.AttributeType);
                                }
                                writer.WriteObjectEnd();
                            }
                        }

                        if (keySchema != null)
                        {
                            KeySchemaElement rangeKeyElement = keySchema.RangeKeyElement;
                            if (rangeKeyElement != null)
                            {
                                writer.WritePropertyName("RangeKeyElement");
                                writer.WriteObjectStart();
                                if (rangeKeyElement != null && rangeKeyElement.IsSetAttributeName())
                                {
                                    writer.WritePropertyName("AttributeName");
                                    writer.Write(rangeKeyElement.AttributeName);
                                }
                                if (rangeKeyElement != null && rangeKeyElement.IsSetAttributeType())
                                {
                                    writer.WritePropertyName("AttributeType");
                                    writer.Write(rangeKeyElement.AttributeType);
                                }
                                writer.WriteObjectEnd();
                            }
                        }
                        writer.WriteObjectEnd();
                    }
                }

                if (createTableRequest != null)
                {
                    ProvisionedThroughput provisionedThroughput = createTableRequest.ProvisionedThroughput;
                    if (provisionedThroughput != null)
                    {
                        writer.WritePropertyName("ProvisionedThroughput");
                        writer.WriteObjectStart();
                        if (provisionedThroughput != null && provisionedThroughput.IsSetReadCapacityUnits())
                        {
                            writer.WritePropertyName("ReadCapacityUnits");
                            writer.Write(provisionedThroughput.ReadCapacityUnits);
                        }
                        if (provisionedThroughput != null && provisionedThroughput.IsSetWriteCapacityUnits())
                        {
                            writer.WritePropertyName("WriteCapacityUnits");
                            writer.Write(provisionedThroughput.WriteCapacityUnits);
                        }
                        writer.WriteObjectEnd();
                    }
                }

                writer.WriteObjectEnd();

                string snippet = stringWriter.ToString();
                request.Content = System.Text.Encoding.UTF8.GetBytes(snippet);
                return(request);
            }
        }
Exemplo n.º 7
0
		protected string ParseKey(KeySchema key)
		{
			var stat = new StringBuilder();
			switch (key.KeyType)
			{
				case ConstraintType.KeyForeign:
					stat.AppendFormat(@"FOREIGN KEY ({0}) REFERENCES {1}",
						ParseColumnListIndex(key.Columns).JoinStrings(),
						MakeDdlElementName(key.RelTable));

					if (!string.IsNullOrEmpty(key.RelColumns))
						stat.AppendFormat(@" ({0})", ParseColumnListIndex(key.RelColumns).JoinStrings());

					switch (key.DeleteRule)
					{
						case LinkRule.Cascade:
							stat.Append(@" ON DELETE CASCADE");
							break;
						case LinkRule.SetNull:
							stat.Append(@" ON DELETE SET NULL");
							break;
					}
					switch (key.UpdateRule)
					{
						case LinkRule.Cascade:
							stat.Append(@" ON UPDATE CASCADE");
							break;
						case LinkRule.SetNull:
							stat.Append(@" ON UPDATE SET NULL");
							break;
					}
					break;
				case ConstraintType.KeyPrimary:
					//TODO проверить на DB отличных от MS SQL
					stat.AppendFormat(@"PRIMARY KEY ({0})", ParseColumnListIndex(key.Columns).JoinStrings(@","));
					break;
				case ConstraintType.Unique:
					stat.AppendFormat(@"UNIQUE ({0})", ParseColumnListIndex(key.Columns).JoinStrings());
					break;
				case ConstraintType.Check:
					stat.AppendFormat(@"CHECK ({0})", key.Source);
					break;
				case ConstraintType.Default:
					stat.AppendFormat(@"DEFAULT {0} FOR {1}", key.Source, key.Columns);
					break;
			}
			return stat.ToString();
		}
Exemplo n.º 8
0
		protected string MakeDdlKeyDrop(KeySchema key, TableSchema table)
		{
			return string.Format(@"ALTER TABLE {0} DROP CONSTRAINT {1}",
				MakeDdlElementName(table.Name), MakeDdlElementName(key.Name));
		}
Exemplo n.º 9
0
		protected string MakeDdlKeyCreateByAlter(KeySchema key, TableSchema table)
		{
			return string.Format(@"ALTER TABLE {0} ADD CONSTRAINT {1} {2}",
				MakeDdlElementName(table.Name), MakeDdlElementName(key.Name),
				ParseKey(key));
		}
Exemplo n.º 10
0
		protected string MakeDdlDefaultCreate(KeySchema key, TableSchema table)
		{
			return string.Format(@"ALTER TABLE {0} ADD CONSTRAINT {1} DEFAULT {2} FOR {3}",
				MakeDdlElementName(table.Name), MakeDdlElementName(key.Name),
				key.Source, key.Columns);
		}
Exemplo n.º 11
0
		private static List<KeySchema> GetKeys(DbConnection con, SchemaNamedElement eTable)
		{
			var aStore = new List<KeySchema>();
			var aHash = new List<string>();

			string[] restrict3 = {null, null, null};

			#region Primary
			restrict3[0] = null;
			restrict3[1] = null;
			restrict3[2] = eTable.Name;
			var dtShema = con.GetSchema("PrimaryKeys", restrict3);
			aHash.Clear();
			for (var x = 0; x < dtShema.Rows.Count; x++)
			{
				var cRow = dtShema.Rows[x];
				var cName = cRow["PK_NAME"].ToString();
				if (aHash.Contains(cName))
					continue;
				var eKey = new KeySchema();
				var columns = "";
				aHash.Add(cName);
				eKey.KeyType = ConstraintType.KeyPrimary;
				eKey.Name = cName;
				var dtv = dtShema.DefaultView;
				dtv.RowFilter = "PK_NAME = '" + cName + "'";
				dtv.Sort = "ORDINAL_POSITION ASC";
				for (var y = 0; y < dtv.Count; y++)
					columns += (dtv[y]["COLUMN_NAME"] + ", ");
				columns = columns.Remove(columns.Length - 2, 2);
				eKey.Columns = columns;
				aStore.Add(eKey);
			}
			#endregion

			#region Foreign
			restrict3[0] = null;
			restrict3[1] = null;
			restrict3[2] = eTable.Name;
			dtShema = con.GetSchema("ForeignKeys", restrict3);
			var dtShemaCols = con.GetSchema("ForeignKeyColumns", restrict3);
			for (var x = 0; x < dtShema.Rows.Count; x++)
			{
				var cRow = dtShema.Rows[x];
				var cName = cRow["INDEX_NAME"].ToString();
				var eKey = new KeySchema();
				string columns = "", rcolumns = "";
				eKey.KeyType = ConstraintType.KeyForeign;
				eKey.Name = cName;
				eKey.RelTable = cRow["REFERENCED_TABLE_NAME"].ToString();
				var uRule = cRow["UPDATE_RULE"].ToString();
				var dRule = cRow["DELETE_RULE"].ToString();
				switch (uRule)
				{
					case "RESTRICT":
						eKey.UpdateRule = LinkRule.None;
						break;
					case "CASCADE":
						eKey.UpdateRule = LinkRule.Cascade;
						break;
					case "SET NULL":
						eKey.UpdateRule = LinkRule.SetNull;
						break;
					case "SET DEFAULT":
						eKey.UpdateRule = LinkRule.SetDefault;
						break;
				}

				switch (dRule)
				{
					case "RESTRICT":
						eKey.DeleteRule = LinkRule.None;
						break;
					case "CASCADE":
						eKey.DeleteRule = LinkRule.Cascade;
						break;
					case "SET NULL":
						eKey.DeleteRule = LinkRule.SetNull;
						break;
					case "SET DEFAULT":
						eKey.DeleteRule = LinkRule.SetDefault;
						break;
				}

				var dtv = dtShemaCols.DefaultView;
				dtv.RowFilter = "CONSTRAINT_NAME = '" + cName + "'";
				dtv.Sort = "ORDINAL_POSITION ASC";
				for (var y = 0; y < dtv.Count; y++)
				{
					columns += (dtv[y]["COLUMN_NAME"] + ", ");
					rcolumns += (dtv[y]["REFERENCED_COLUMN_NAME"] + ", ");
				}
				columns = columns.Remove(columns.Length - 2, 2);
				rcolumns = rcolumns.Remove(rcolumns.Length - 2, 2);
				eKey.Columns = columns;
				eKey.RelColumns = rcolumns;
				aStore.Add(eKey);
			}
			#endregion

			#region Unique
			restrict3[0] = null;
			restrict3[1] = null;
			restrict3[2] = eTable.Name;
			dtShema = con.GetSchema("UniqueKeys", restrict3);
			aHash.Clear();
			for (var x = 0; x < dtShema.Rows.Count; x++)
			{
				var cRow = dtShema.Rows[x];
				var cName = cRow["UK_NAME"].ToString();
				if (aHash.Contains(cName))
					continue;
				var eKey = new KeySchema();
				var columns = "";
				aHash.Add(cName);
				eKey.KeyType = ConstraintType.Unique;
				eKey.Name = cName;
				var dtv = dtShema.DefaultView;
				dtv.RowFilter = "UK_NAME = '" + cName + "'";
				dtv.Sort = "ORDINAL_POSITION ASC";
				for (var y = 0; y < dtv.Count; y++)
					columns += (dtv[y]["COLUMN_NAME"] + ", ");
				columns = columns.Remove(columns.Length - 2, 2);
				eKey.Columns = columns;
				aStore.Add(eKey);
			}
			#endregion

			return aStore;
		}
 public virtual string MakeDdlKeyCreateByAlter(KeySchema key, TableSchema table)
 {
     return(string.Format(@"ALTER TABLE {0} ADD CONSTRAINT {1} {2}",
                          MakeDdlElementName(table.Name), MakeDdlElementName(key.Name),
                          ParseKey(key)));
 }
Exemplo n.º 13
0
		private static List<KeySchema> GetKeys(Table xTable)
		{
			var keys = new List<KeySchema>();

			for (var j = 0; j < xTable.Keys.Count; j++)
			{
				var xKey = xTable.Keys[j];

				var cols = new StringBuilder();
				var rcols = new StringBuilder();

				for (var k = 0; k < xKey.Columns.Count; k++)
				{
					cols.Append(xKey.Columns[k].Name);
					cols.Append(k == xKey.Columns.Count - 1 ? string.Empty : ", ");
				}

				var key = new KeySchema
				{
					Name = xKey.Name,
					RelTable = xKey.RelatedTable,
					DeleteRule = GetDbsmRule(xKey.DeleteRule),
					UpdateRule = GetDbsmRule(xKey.UpdateRule)
				};

				switch (xKey.Type)
				{
					case KeyTypeEnum.adKeyPrimary:
						key.KeyType = ConstraintType.KeyPrimary;
						break;
					case KeyTypeEnum.adKeyForeign:
						for (var k = 0; k < xKey.Columns.Count; k++)
						{
							rcols.Append(xKey.Columns[k].RelatedColumn);
							rcols.Append(k == xKey.Columns.Count - 1 ? string.Empty : ", ");
						}
						key.KeyType = ConstraintType.KeyForeign;
						break;
					case KeyTypeEnum.adKeyUnique:
						key.KeyType = ConstraintType.Unique;
						break;
				}
				key.Columns = cols.ToString();
				key.RelColumns = rcols.Length != 0 ? rcols.ToString() : null;

				keys.Add(key);
			}

			return keys;
		}
Exemplo n.º 14
0
        public T FindBy(KeySchema primaryKey)
        {
            int index;

            return(this.FindBy(primaryKey, out index));
        }
 /// <summary>
 /// Проверка необходимости пересоздания связанных Foreign Key
 /// при удаление констрента
 /// </summary>
 /// <param name="eKey"></param>
 /// <returns></returns>
 protected abstract bool CheckKeyTypeForRecreate(KeySchema eKey);
Exemplo n.º 16
0
		protected override bool CheckKeyTypeForRecreate(KeySchema eKey)
		{
			return eKey.KeyType == ConstraintType.Unique;
			// || eKey.keyType == DBSM.ConstraintType.KeyPrimary)
		}
Exemplo n.º 17
0
        private static List <KeySchema> GetKeys(DbConnection con, SchemaNamedElement eTable)
        {
            var aStore = new List <KeySchema>();
            var aHash  = new List <string>();

            string[] restrict3 = { null, null, null };

            #region Primary
            restrict3[0] = null;
            restrict3[1] = null;
            restrict3[2] = eTable.Name;
            var dtShema = con.GetSchema("PrimaryKeys", restrict3);
            aHash.Clear();
            for (var x = 0; x < dtShema.Rows.Count; x++)
            {
                var cRow  = dtShema.Rows[x];
                var cName = cRow["PK_NAME"].ToString();
                if (aHash.Contains(cName))
                {
                    continue;
                }
                var eKey    = new KeySchema();
                var columns = "";
                aHash.Add(cName);
                eKey.KeyType = ConstraintType.KeyPrimary;
                eKey.Name    = cName;
                var dtv = dtShema.DefaultView;
                dtv.RowFilter = "PK_NAME = '" + cName + "'";
                dtv.Sort      = "ORDINAL_POSITION ASC";
                for (var y = 0; y < dtv.Count; y++)
                {
                    columns += (dtv[y]["COLUMN_NAME"] + ", ");
                }
                columns      = columns.Remove(columns.Length - 2, 2);
                eKey.Columns = columns;
                aStore.Add(eKey);
            }
            #endregion

            #region Foreign
            restrict3[0] = null;
            restrict3[1] = null;
            restrict3[2] = eTable.Name;
            dtShema      = con.GetSchema("ForeignKeys", restrict3);
            var dtShemaCols = con.GetSchema("ForeignKeyColumns", restrict3);
            for (var x = 0; x < dtShema.Rows.Count; x++)
            {
                var    cRow = dtShema.Rows[x];
                var    cName = cRow["INDEX_NAME"].ToString();
                var    eKey = new KeySchema();
                string columns = "", rcolumns = "";
                eKey.KeyType  = ConstraintType.KeyForeign;
                eKey.Name     = cName;
                eKey.RelTable = cRow["REFERENCED_TABLE_NAME"].ToString();
                var uRule = cRow["UPDATE_RULE"].ToString();
                var dRule = cRow["DELETE_RULE"].ToString();
                switch (uRule)
                {
                case "RESTRICT":
                    eKey.UpdateRule = LinkRule.None;
                    break;

                case "CASCADE":
                    eKey.UpdateRule = LinkRule.Cascade;
                    break;

                case "SET NULL":
                    eKey.UpdateRule = LinkRule.SetNull;
                    break;

                case "SET DEFAULT":
                    eKey.UpdateRule = LinkRule.SetDefault;
                    break;
                }

                switch (dRule)
                {
                case "RESTRICT":
                    eKey.DeleteRule = LinkRule.None;
                    break;

                case "CASCADE":
                    eKey.DeleteRule = LinkRule.Cascade;
                    break;

                case "SET NULL":
                    eKey.DeleteRule = LinkRule.SetNull;
                    break;

                case "SET DEFAULT":
                    eKey.DeleteRule = LinkRule.SetDefault;
                    break;
                }

                var dtv = dtShemaCols.DefaultView;
                dtv.RowFilter = "CONSTRAINT_NAME = '" + cName + "'";
                dtv.Sort      = "ORDINAL_POSITION ASC";
                for (var y = 0; y < dtv.Count; y++)
                {
                    columns  += (dtv[y]["COLUMN_NAME"] + ", ");
                    rcolumns += (dtv[y]["REFERENCED_COLUMN_NAME"] + ", ");
                }
                columns         = columns.Remove(columns.Length - 2, 2);
                rcolumns        = rcolumns.Remove(rcolumns.Length - 2, 2);
                eKey.Columns    = columns;
                eKey.RelColumns = rcolumns;
                aStore.Add(eKey);
            }
            #endregion

            #region Unique
            restrict3[0] = null;
            restrict3[1] = null;
            restrict3[2] = eTable.Name;
            dtShema      = con.GetSchema("UniqueKeys", restrict3);
            aHash.Clear();
            for (var x = 0; x < dtShema.Rows.Count; x++)
            {
                var cRow  = dtShema.Rows[x];
                var cName = cRow["UK_NAME"].ToString();
                if (aHash.Contains(cName))
                {
                    continue;
                }
                var eKey    = new KeySchema();
                var columns = "";
                aHash.Add(cName);
                eKey.KeyType = ConstraintType.Unique;
                eKey.Name    = cName;
                var dtv = dtShema.DefaultView;
                dtv.RowFilter = "UK_NAME = '" + cName + "'";
                dtv.Sort      = "ORDINAL_POSITION ASC";
                for (var y = 0; y < dtv.Count; y++)
                {
                    columns += (dtv[y]["COLUMN_NAME"] + ", ");
                }
                columns      = columns.Remove(columns.Length - 2, 2);
                eKey.Columns = columns;
                aStore.Add(eKey);
            }
            #endregion

            return(aStore);
        }
        private static List <KeySchema> GetKeys(DbConnection con, SchemaNamedElement eTable)
        {
            var dbsmKeys = new Dictionary <string, KeySchema>();

            string[] restrict3 = { null, null, eTable.Name };

            #region Primary
            var dtShema = con.GetSchema("Columns", restrict3);
            var dtv     = dtShema.DefaultView;
            dtv.RowFilter = "PRIMARY_KEY = 'True'";
            dtv.Sort      = "ORDINAL_POSITION ASC";

            if (dtv.Count > 0)
            {
                string columns = null;
                for (var y = 0; y < dtv.Count; y++)
                {
                    if (columns == null)
                    {
                        columns = dtv[y]["COLUMN_NAME"].ToString();
                    }
                    else
                    {
                        columns += (", " + dtv[y]["COLUMN_NAME"]);
                    }
                }

                var eKey = new KeySchema
                {
                    KeyType = ConstraintType.KeyPrimary,
                    Name    = ("PK_" + eTable.Name),
                    Columns = columns
                };
                dbsmKeys.Add(eKey.Name, eKey);
            }
            #endregion

            #region Unique (не поддерживается SQLite)
            //dtv.RowFilter = "PRIMARY_KEY = 'False' AND UNIQUE = 'True'";
            //dtv.Sort = "ORDINAL_POSITION ASC";
            //
            //for (int y = 0; y < dtv.Count; y++)
            //{
            //	string cName = dtv[y]["COLUMN_NAME"].ToString();
            //	if (!dbsmKeys.ContainsKey(cName))
            //	{
            //		DBKey eKey = new DBKey();
            //		eKey.Name = cName;
            //		eKey.KeyType = ConstraintType.Unique;
            //		eKey.ColumnList = cName;
            //		dbsmKeys.Add(cName, eKey);
            //	}
            //}
            #endregion

            #region Foreign
            dtShema = con.GetSchema("ForeignKeys", restrict3);

            for (var x = 0; x < dtShema.Rows.Count; x++)
            {
                var cRow  = dtShema.Rows[x];
                var cName = cRow["CONSTRAINT_NAME"].ToString();

                if (dbsmKeys.ContainsKey(cName))
                {
                    continue;
                }
                var    eKey     = new KeySchema();
                string columns  = null;
                string rcolumns = null;

                eKey.KeyType  = ConstraintType.KeyForeign;
                eKey.Name     = cName;
                eKey.RelTable = cRow["TABLE_NAME"].ToString();

                dtv           = dtShema.DefaultView;
                dtv.RowFilter = "CONSTRAINT_NAME = '" + cName + "'";
                dtv.Sort      = "FKEY_FROM_ORDINAL_POSITION ASC";

                for (var y = 0; y < dtv.Count; y++)
                {
                    if (columns == null)
                    {
                        Debug.Assert(rcolumns == null);
                        columns  = dtv[y]["FKEY_FROM_COLUMN"].ToString();
                        rcolumns = dtv[y]["FKEY_TO_COLUMN"].ToString();
                    }
                    else
                    {
                        Debug.Assert(rcolumns != null);
                        columns  += (", " + dtv[y]["FKEY_FROM_COLUMN"]);
                        rcolumns += (", " + dtv[y]["FKEY_TO_COLUMN"]);
                    }
                }

                eKey.Columns    = columns;
                eKey.RelColumns = rcolumns;
                dbsmKeys.Add(cName, eKey);
            }
            #endregion

            return(new List <KeySchema>(dbsmKeys.Values));
        }
Exemplo n.º 19
0
		private static List<KeySchema> GetKeys(SqlConnection con, SchemaNamedElement eTable)
		{
			var keys = new List<KeySchema>();
			var aHash = new Dictionary<string, bool>();

			string[] restrict3 = {null, null, null};
			string[] restrict4 = {null, null, null, null};

			#region Primary keys
			restrict3[0] = null;
			restrict3[1] = null;
			restrict3[2] = eTable.Name;
			var dtShema = SqlSchemaFactory.GetSchema(con, "PrimaryKeys", restrict3);
			aHash.Clear();
			for (var x = 0; x < dtShema.Rows.Count; x++)
			{
				var cRow = dtShema.Rows[x];
				var cName = cRow["CONSTRAINT_NAME"].ToString();
				if (aHash.ContainsKey(cName))
					continue;
				aHash.Add(cName, true);

				var eKey = new KeySchema
				{
					KeyType = ConstraintType.KeyPrimary,
					Name = cName,
					Clustered = Convert.ToBoolean(cRow["IS_CLUSTERED"], CultureInfo.InvariantCulture)
				};

				var columns = new StringBuilder();

				var dtv = dtShema.DefaultView;
				dtv.RowFilter = string.Format("CONSTRAINT_NAME = '{0}'", cName);
				dtv.Sort = "ORDINAL_POSITION ASC";
				for (var y = 0; y < dtv.Count; y++)
				{
					columns.Append(dtv[y]["COLUMN_NAME"]);
					columns.Append(y == dtv.Count - 1 ? string.Empty : ", ");
				}

				eKey.Columns = columns.ToString();
				keys.Add(eKey);
			}
			#endregion

			#region Foreign keys
			restrict4[0] = null;
			restrict4[1] = null;
			restrict4[2] = eTable.Name;
			restrict4[3] = null;
			dtShema = SqlSchemaFactory.GetSchema(con, "ForeignKeys", restrict4);
			aHash.Clear();
			for (var x = 0; x < dtShema.Rows.Count; x++)
			{
				var cRow = dtShema.Rows[x];
				if (Convert.ToBoolean(cRow["IS_DISABLED"], CultureInfo.InvariantCulture))
					continue;
				var cName = cRow["CONSTRAINT_NAME"].ToString();
				if (aHash.ContainsKey(cName))
					continue;
				aHash.Add(cName, true);

				var eKey = new KeySchema
				{
					KeyType = ConstraintType.KeyForeign,
					Name = cName,
					RelTable = cRow["PK_TABLE_NAME"].ToString(),
					UpdateRule = GetDbsmRule(cRow["UPDATE_RULE"].ToString()),
					DeleteRule = GetDbsmRule(cRow["DELETE_RULE"].ToString())
				};

				var fcolumns = new StringBuilder();
				var rcolumns = new StringBuilder();

				var dtv = dtShema.DefaultView;
				dtv.RowFilter = string.Format("CONSTRAINT_NAME = '{0}'", cName);
				dtv.Sort = "ORDINAL_POSITION ASC";
				for (var y = 0; y < dtv.Count; y++)
				{
					fcolumns.Append(dtv[y]["FK_COLUMN_NAME"]);
					fcolumns.Append(y == dtv.Count - 1 ? string.Empty : ", ");

					rcolumns.Append(dtv[y]["PK_COLUMN_NAME"]);
					rcolumns.Append(y == dtv.Count - 1 ? string.Empty : ", ");
				}

				eKey.Columns = fcolumns.ToString();
				eKey.RelColumns = rcolumns.ToString();
				keys.Add(eKey);
			}
			#endregion

			#region Checks
			restrict3[0] = null;
			restrict3[1] = null;
			restrict3[2] = eTable.Name;
			dtShema = SqlSchemaFactory.GetSchema(con, "CheckConstraints", restrict3);
			for (var x = 0; x < dtShema.Rows.Count; x++)
			{
				var row = dtShema.Rows[x];

				var eKey = new KeySchema
				{
					KeyType = ConstraintType.Check,
					Name = row["CONSTRAINT_NAME"].ToString(),
					Source = row["SOURCE"].ToString()
				};

				keys.Add(eKey);
			}
			#endregion

			#region Unique
			restrict3[0] = null;
			restrict3[1] = null;
			restrict3[2] = eTable.Name;
			dtShema = SqlSchemaFactory.GetSchema(con, "UniqueKeys", restrict3);
			aHash.Clear();
			for (var x = 0; x < dtShema.Rows.Count; x++)
			{
				var cRow = dtShema.Rows[x];
				var cName = cRow["CONSTRAINT_NAME"].ToString();
				if (aHash.ContainsKey(cName))
					continue;
				var eKey = new KeySchema();
				aHash.Add(cName, true);
				eKey.KeyType = ConstraintType.Unique;
				eKey.Name = cName;

				var columns = new StringBuilder();

				var dtv = dtShema.DefaultView;
				dtv.RowFilter = "CONSTRAINT_NAME = '" + cName + "'";
				dtv.Sort = "ORDINAL_POSITION ASC";
				for (var y = 0; y < dtv.Count; y++)
				{
					columns.Append(dtv[y]["COLUMN_NAME"]);
					columns.Append(y == dtv.Count - 1 ? string.Empty : ", ");
				}

				eKey.Columns = columns.ToString();
				keys.Add(eKey);
			}
			#endregion

			#region Default constraints
			restrict3[0] = null;
			restrict3[1] = null;
			restrict3[2] = eTable.Name;
			dtShema = SqlSchemaFactory.GetSchema(con, "DefaultConstraints", restrict3);
			for (var x = 0; x < dtShema.Rows.Count; x++)
			{
				var cRow = dtShema.Rows[x];
				var eKey = new KeySchema
				{
					KeyType = ConstraintType.Default,
					Name = cRow["CONSTRAINT_NAME"].ToString(),
					Columns = cRow["COLUMN_NAME"].ToString(),
					Source = UnBracket.ParseUnBracket(cRow["SOURCE"].ToString())
				};
				keys.Add(eKey);
			}
			#endregion

			return keys;
		}
Exemplo n.º 20
0
		private static List<KeySchema> GetKeys(DbConnection con, SchemaNamedElement eTable)
		{
			var dbsmKeys = new Dictionary<string, KeySchema>();

			string[] restrict3 = {null, null, eTable.Name};

			#region Primary
			var dtShema = con.GetSchema("Columns", restrict3);
			var dtv = dtShema.DefaultView;
			dtv.RowFilter = "PRIMARY_KEY = 'True'";
			dtv.Sort = "ORDINAL_POSITION ASC";

			if (dtv.Count > 0)
			{
				string columns = null;
				for (var y = 0; y < dtv.Count; y++)
					if (columns == null)
						columns = dtv[y]["COLUMN_NAME"].ToString();
					else
						columns += (", " + dtv[y]["COLUMN_NAME"]);

				var eKey = new KeySchema
				{
					KeyType = ConstraintType.KeyPrimary,
					Name = ("PK_" + eTable.Name),
					Columns = columns
				};
				dbsmKeys.Add(eKey.Name, eKey);
			}
			#endregion

			#region Unique (не поддерживается SQLite)
			//dtv.RowFilter = "PRIMARY_KEY = 'False' AND UNIQUE = 'True'";
			//dtv.Sort = "ORDINAL_POSITION ASC";
			//
			//for (int y = 0; y < dtv.Count; y++)
			//{
			//	string cName = dtv[y]["COLUMN_NAME"].ToString();
			//	if (!dbsmKeys.ContainsKey(cName))
			//	{
			//		DBKey eKey = new DBKey();
			//		eKey.Name = cName;
			//		eKey.KeyType = ConstraintType.Unique;
			//		eKey.ColumnList = cName;
			//		dbsmKeys.Add(cName, eKey);
			//	}
			//}
			#endregion

			#region Foreign
			dtShema = con.GetSchema("ForeignKeys", restrict3);

			for (var x = 0; x < dtShema.Rows.Count; x++)
			{
				var cRow = dtShema.Rows[x];
				var cName = cRow["CONSTRAINT_NAME"].ToString();

				if (dbsmKeys.ContainsKey(cName))
					continue;
				var eKey = new KeySchema();
				string columns = null;
				string rcolumns = null;

				eKey.KeyType = ConstraintType.KeyForeign;
				eKey.Name = cName;
				eKey.RelTable = cRow["TABLE_NAME"].ToString();

				dtv = dtShema.DefaultView;
				dtv.RowFilter = "CONSTRAINT_NAME = '" + cName + "'";
				dtv.Sort = "FKEY_FROM_ORDINAL_POSITION ASC";

				for (var y = 0; y < dtv.Count; y++)
					if (columns == null)
					{
						Debug.Assert(rcolumns == null);
						columns = dtv[y]["FKEY_FROM_COLUMN"].ToString();
						rcolumns = dtv[y]["FKEY_TO_COLUMN"].ToString();
					}
					else
					{
						Debug.Assert(rcolumns != null);
						columns += (", " + dtv[y]["FKEY_FROM_COLUMN"]);
						rcolumns += (", " + dtv[y]["FKEY_TO_COLUMN"]);
					}

				eKey.Columns = columns;
				eKey.RelColumns = rcolumns;
				dbsmKeys.Add(cName, eKey);
			}
			#endregion

			return new List<KeySchema>(dbsmKeys.Values);
		}
 protected string MakeDdlDefaultCreate(KeySchema key, TableSchema table)
 {
     return(string.Format(@"ALTER TABLE {0} ADD CONSTRAINT {1} DEFAULT {2} FOR {3}",
                          MakeDdlElementName(table.Name), MakeDdlElementName(key.Name),
                          key.Source, key.Columns));
 }
Exemplo n.º 22
0
		protected override bool CheckKeyTypeForRecreate(KeySchema eKey)
		{
			return eKey.KeyType == ConstraintType.Unique;
		}
 public string MakeDdlKeyDrop(KeySchema key, TableSchema table)
 {
     return(string.Format(@"ALTER TABLE {0} DROP CONSTRAINT {1}",
                          MakeDdlElementName(table.Name), MakeDdlElementName(key.Name)));
 }
Exemplo n.º 24
0
 protected override bool CheckKeyTypeForRecreate(KeySchema eKey)
 {
     return(eKey.KeyType == ConstraintType.Unique);
 }
        private static List <KeySchema> GetKeys(SqlConnection con, SchemaNamedElement eTable)
        {
            var keys  = new List <KeySchema>();
            var aHash = new Dictionary <string, bool>();

            string[] restrict3 = { null, null, null };
            string[] restrict4 = { null, null, null, null };

            #region Primary keys
            restrict3[0] = null;
            restrict3[1] = null;
            restrict3[2] = eTable.Name;
            var dtShema = SqlSchemaFactory.GetSchema(con, "PrimaryKeys", restrict3);
            aHash.Clear();
            for (var x = 0; x < dtShema.Rows.Count; x++)
            {
                var cRow  = dtShema.Rows[x];
                var cName = cRow["CONSTRAINT_NAME"].ToString();
                if (aHash.ContainsKey(cName))
                {
                    continue;
                }
                aHash.Add(cName, true);

                var eKey = new KeySchema
                {
                    KeyType   = ConstraintType.KeyPrimary,
                    Name      = cName,
                    Clustered = Convert.ToBoolean(cRow["IS_CLUSTERED"], CultureInfo.InvariantCulture)
                };

                var columns = new StringBuilder();

                var dtv = dtShema.DefaultView;
                dtv.RowFilter = string.Format("CONSTRAINT_NAME = '{0}'", cName);
                dtv.Sort      = "ORDINAL_POSITION ASC";
                for (var y = 0; y < dtv.Count; y++)
                {
                    columns.Append(dtv[y]["COLUMN_NAME"]);
                    columns.Append(y == dtv.Count - 1 ? string.Empty : ", ");
                }

                eKey.Columns = columns.ToString();
                keys.Add(eKey);
            }
            #endregion

            #region Foreign keys
            restrict4[0] = null;
            restrict4[1] = null;
            restrict4[2] = eTable.Name;
            restrict4[3] = null;
            dtShema      = SqlSchemaFactory.GetSchema(con, "ForeignKeys", restrict4);
            aHash.Clear();
            for (var x = 0; x < dtShema.Rows.Count; x++)
            {
                var cRow = dtShema.Rows[x];
                if (Convert.ToBoolean(cRow["IS_DISABLED"], CultureInfo.InvariantCulture))
                {
                    continue;
                }
                var cName = cRow["CONSTRAINT_NAME"].ToString();
                if (aHash.ContainsKey(cName))
                {
                    continue;
                }
                aHash.Add(cName, true);

                var eKey = new KeySchema
                {
                    KeyType    = ConstraintType.KeyForeign,
                    Name       = cName,
                    RelTable   = cRow["PK_TABLE_NAME"].ToString(),
                    UpdateRule = GetDbsmRule(cRow["UPDATE_RULE"].ToString()),
                    DeleteRule = GetDbsmRule(cRow["DELETE_RULE"].ToString())
                };

                var fcolumns = new StringBuilder();
                var rcolumns = new StringBuilder();

                var dtv = dtShema.DefaultView;
                dtv.RowFilter = string.Format("CONSTRAINT_NAME = '{0}'", cName);
                dtv.Sort      = "ORDINAL_POSITION ASC";
                for (var y = 0; y < dtv.Count; y++)
                {
                    fcolumns.Append(dtv[y]["FK_COLUMN_NAME"]);
                    fcolumns.Append(y == dtv.Count - 1 ? string.Empty : ", ");

                    rcolumns.Append(dtv[y]["PK_COLUMN_NAME"]);
                    rcolumns.Append(y == dtv.Count - 1 ? string.Empty : ", ");
                }

                eKey.Columns    = fcolumns.ToString();
                eKey.RelColumns = rcolumns.ToString();
                keys.Add(eKey);
            }
            #endregion

            #region Checks
            restrict3[0] = null;
            restrict3[1] = null;
            restrict3[2] = eTable.Name;
            dtShema      = SqlSchemaFactory.GetSchema(con, "CheckConstraints", restrict3);
            for (var x = 0; x < dtShema.Rows.Count; x++)
            {
                var row = dtShema.Rows[x];

                var eKey = new KeySchema
                {
                    KeyType = ConstraintType.Check,
                    Name    = row["CONSTRAINT_NAME"].ToString(),
                    Source  = row["SOURCE"].ToString()
                };

                keys.Add(eKey);
            }
            #endregion

            #region Unique
            restrict3[0] = null;
            restrict3[1] = null;
            restrict3[2] = eTable.Name;
            dtShema      = SqlSchemaFactory.GetSchema(con, "UniqueKeys", restrict3);
            aHash.Clear();
            for (var x = 0; x < dtShema.Rows.Count; x++)
            {
                var cRow  = dtShema.Rows[x];
                var cName = cRow["CONSTRAINT_NAME"].ToString();
                if (aHash.ContainsKey(cName))
                {
                    continue;
                }
                var eKey = new KeySchema();
                aHash.Add(cName, true);
                eKey.KeyType = ConstraintType.Unique;
                eKey.Name    = cName;

                var columns = new StringBuilder();

                var dtv = dtShema.DefaultView;
                dtv.RowFilter = "CONSTRAINT_NAME = '" + cName + "'";
                dtv.Sort      = "ORDINAL_POSITION ASC";
                for (var y = 0; y < dtv.Count; y++)
                {
                    columns.Append(dtv[y]["COLUMN_NAME"]);
                    columns.Append(y == dtv.Count - 1 ? string.Empty : ", ");
                }

                eKey.Columns = columns.ToString();
                keys.Add(eKey);
            }
            #endregion

            #region Default constraints
            restrict3[0] = null;
            restrict3[1] = null;
            restrict3[2] = eTable.Name;
            dtShema      = SqlSchemaFactory.GetSchema(con, "DefaultConstraints", restrict3);
            for (var x = 0; x < dtShema.Rows.Count; x++)
            {
                var cRow = dtShema.Rows[x];
                var eKey = new KeySchema
                {
                    KeyType = ConstraintType.Default,
                    Name    = cRow["CONSTRAINT_NAME"].ToString(),
                    Columns = cRow["COLUMN_NAME"].ToString(),
                    Source  = UnBracket.ParseUnBracket(cRow["SOURCE"].ToString())
                };
                keys.Add(eKey);
            }
            #endregion

            return(keys);
        }
        public IRequest Marshall(CreateTableRequest createTableRequest)
        {
            IRequest request = new DefaultRequest(createTableRequest, "AmazonDynamoDB");
            string   target  = "DynamoDB_20111205.CreateTable";

            request.Headers["X-Amz-Target"] = target;
            request.Headers["Content-Type"] = "application/x-amz-json-1.0";



            string uriResourcePath = "";

            if (uriResourcePath.Contains("?"))
            {
                string queryString = uriResourcePath.Substring(uriResourcePath.IndexOf("?") + 1);
                uriResourcePath = uriResourcePath.Substring(0, uriResourcePath.IndexOf("?"));

                foreach (string s in queryString.Split('&', ';'))
                {
                    string[] nameValuePair = s.Split('=');
                    if (nameValuePair.Length == 2 && nameValuePair[1].Length > 0)
                    {
                        request.Parameters.Add(nameValuePair[0], nameValuePair[1]);
                    }
                    else
                    {
                        request.Parameters.Add(nameValuePair[0], null);
                    }
                }
            }

            request.ResourcePath = uriResourcePath;


            using (StringWriter stringWriter = new StringWriter())
            {
                JsonWriter writer = new JsonWriter(stringWriter);
                writer.WriteObjectStart();

                if (createTableRequest != null && createTableRequest.IsSetTableName())
                {
                    writer.WritePropertyName("TableName");
                    writer.Write(createTableRequest.TableName);
                }

                if (createTableRequest != null)
                {
                    KeySchema keySchema = createTableRequest.KeySchema;
                    if (keySchema != null)
                    {
                        writer.WritePropertyName("KeySchema");
                        writer.WriteObjectStart();

                        if (keySchema != null)
                        {
                            KeySchemaElement hashKeyElement = keySchema.HashKeyElement;
                            if (hashKeyElement != null)
                            {
                                writer.WritePropertyName("HashKeyElement");
                                writer.WriteObjectStart();
                                if (hashKeyElement != null && hashKeyElement.IsSetAttributeName())
                                {
                                    writer.WritePropertyName("AttributeName");
                                    writer.Write(hashKeyElement.AttributeName);
                                }
                                if (hashKeyElement != null && hashKeyElement.IsSetAttributeType())
                                {
                                    writer.WritePropertyName("AttributeType");
                                    writer.Write(hashKeyElement.AttributeType);
                                }
                                writer.WriteObjectEnd();
                            }
                        }

                        if (keySchema != null)
                        {
                            KeySchemaElement rangeKeyElement = keySchema.RangeKeyElement;
                            if (rangeKeyElement != null)
                            {
                                writer.WritePropertyName("RangeKeyElement");
                                writer.WriteObjectStart();
                                if (rangeKeyElement != null && rangeKeyElement.IsSetAttributeName())
                                {
                                    writer.WritePropertyName("AttributeName");
                                    writer.Write(rangeKeyElement.AttributeName);
                                }
                                if (rangeKeyElement != null && rangeKeyElement.IsSetAttributeType())
                                {
                                    writer.WritePropertyName("AttributeType");
                                    writer.Write(rangeKeyElement.AttributeType);
                                }
                                writer.WriteObjectEnd();
                            }
                        }
                        writer.WriteObjectEnd();
                    }
                }

                if (createTableRequest != null)
                {
                    ProvisionedThroughput provisionedThroughput = createTableRequest.ProvisionedThroughput;
                    if (provisionedThroughput != null)
                    {
                        writer.WritePropertyName("ProvisionedThroughput");
                        writer.WriteObjectStart();
                        if (provisionedThroughput != null && provisionedThroughput.IsSetReadCapacityUnits())
                        {
                            writer.WritePropertyName("ReadCapacityUnits");
                            writer.Write(provisionedThroughput.ReadCapacityUnits);
                        }
                        if (provisionedThroughput != null && provisionedThroughput.IsSetWriteCapacityUnits())
                        {
                            writer.WritePropertyName("WriteCapacityUnits");
                            writer.Write(provisionedThroughput.WriteCapacityUnits);
                        }
                        writer.WriteObjectEnd();
                    }
                }

                writer.WriteObjectEnd();

                string snippet = stringWriter.ToString();
                request.Content = System.Text.Encoding.UTF8.GetBytes(snippet);
            }


            return(request);
        }
 protected override bool CheckKeyTypeForRecreate(KeySchema eKey)
 {
     return(eKey.KeyType == ConstraintType.Unique);
     // || eKey.keyType == DBSM.ConstraintType.KeyPrimary)
 }
Exemplo n.º 28
0
		/// <summary>
		/// Проверка необходимости пересоздания связанных Foreign Key
		/// при удаление констрента
		/// </summary>
		/// <param name="eKey"></param>
		/// <returns></returns>
		protected abstract bool CheckKeyTypeForRecreate(KeySchema eKey);