private void LoadTableInfo() { ClearTableData(); var tableInfoCache = SdkCache.GetCache <string, TableDescription>(DDBClient, TableInfoCacheIdentifier, StringComparer.Ordinal); bool staleCacheData; TableDescription table = tableInfoCache.GetValue(TableName, this.DescribeTable, out staleCacheData); if (staleCacheData) { var logger = Logger.GetLogger(typeof(Table)); logger.InfoFormat("Description for table [{0}] loaded from SDK Cache", TableName); } foreach (var key in table.KeySchema) { string keyName = key.AttributeName; AttributeDefinition attributeDefinition = table.AttributeDefinitions .FirstOrDefault(a => string.Equals(a.AttributeName, keyName, StringComparison.Ordinal)); if (attributeDefinition == null) { throw new InvalidOperationException("No attribute definition found for key " + key.AttributeName); } KeyDescription keyDescription = new KeyDescription { IsHash = string.Equals(key.KeyType, "HASH", StringComparison.OrdinalIgnoreCase), Type = GetType(attributeDefinition.AttributeType) }; if (keyDescription.IsHash) { HashKeys.Add(keyName); } else { RangeKeys.Add(keyName); } Keys[keyName] = keyDescription; } if (table.LocalSecondaryIndexes != null) { foreach (var index in table.LocalSecondaryIndexes) { LocalSecondaryIndexes[index.IndexName] = index; LocalSecondaryIndexNames.Add(index.IndexName); } } if (table.GlobalSecondaryIndexes != null) { foreach (var index in table.GlobalSecondaryIndexes) { GlobalSecondaryIndexes[index.IndexName] = index; GlobalSecondaryIndexNames.Add(index.IndexName); } } foreach (var attribute in table.AttributeDefinitions) { Attributes.Add(attribute); } }
private void GetTableInfo() { DescribeTableRequest req = new DescribeTableRequest { TableName = TableName }; req.BeforeRequestEvent += new RequestEventHandler(this.UserAgentRequestEventHandlerSync); DescribeTableResult info = this.DDBClient.DescribeTable(req); if (info.Table == null) { throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Table name {0} does not exist", TableName)); } Keys.Clear(); HashKeys.Clear(); RangeKeys.Clear(); TableDescription table = info.Table; foreach (var key in table.KeySchema) { string keyName = key.AttributeName; AttributeDefinition attributeDefinition = table.AttributeDefinitions .FirstOrDefault(a => string.Equals(a.AttributeName, keyName, StringComparison.Ordinal)); if (attributeDefinition == null) { throw new InvalidOperationException("No attribute definition found for key " + key.AttributeName); } KeyDescription keyDescription = new KeyDescription { IsHash = string.Equals(key.KeyType, "HASH", StringComparison.OrdinalIgnoreCase), Type = GetType(attributeDefinition.AttributeType) }; if (keyDescription.IsHash) { HashKeys.Add(keyName); } else { RangeKeys.Add(keyName); } Keys[keyName] = keyDescription; } LocalSecondaryIndexes.Clear(); LocalSecondaryIndexNames.Clear(); if (table.LocalSecondaryIndexes != null) { foreach (var index in table.LocalSecondaryIndexes) { LocalSecondaryIndexes[index.IndexName] = index; LocalSecondaryIndexNames.Add(index.IndexName); } } GlobalSecondaryIndexes.Clear(); GlobalSecondaryIndexNames.Clear(); if (table.GlobalSecondaryIndexes != null) { foreach (var index in table.GlobalSecondaryIndexes) { GlobalSecondaryIndexes[index.IndexName] = index; GlobalSecondaryIndexNames.Add(index.IndexName); } } Attributes.Clear(); foreach (var attribute in table.AttributeDefinitions) { Attributes.Add(attribute); } keyNames = Keys.Keys.ToArray(); }