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()); }
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); }
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); }
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); } }
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); } }
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(); }
protected string MakeDdlKeyDrop(KeySchema key, TableSchema table) { return string.Format(@"ALTER TABLE {0} DROP CONSTRAINT {1}", MakeDdlElementName(table.Name), MakeDdlElementName(key.Name)); }
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)); }
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); }
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))); }
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; }
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);
protected override bool CheckKeyTypeForRecreate(KeySchema eKey) { return eKey.KeyType == ConstraintType.Unique; // || eKey.keyType == DBSM.ConstraintType.KeyPrimary) }
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)); }
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; }
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)); }
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))); }
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) }