private static int DetermineSize(ISqlItem item) { int size = 0; if (item.ItemType == SqlItemType.Column) { size = ((IDbColumn)item.Item).MaxLengthIfText; } else if (item.ItemType == SqlItemType.Parameter) { size = ((DbParameter)item.Item).Size; } else if (item.ItemType == SqlItemType.SubQuery) { SelectStatement query = (SelectStatement)item.Item; if (query.SelectList.Count > 0) size = DetermineSize(query.SelectList[0]); } if (size == 0) { // Non-variable length types. return 0; } else if (size > 0 && size < 100) { // Round up to 100. return 100; } else { // Computed value. return size; } }
private static DbType DetermineDbType(ISqlItem item) { DbType dbType = DbType.Object; if (item.ItemType == SqlItemType.Column) { dbType = ((IDbColumn)item.Item).DbType; } else if (item.ItemType == SqlItemType.Parameter) { dbType = ((DbParameter)item.Item).DbType; } else if (item.ItemType == SqlItemType.SubQuery) { SelectStatement query = (SelectStatement)item.Item; if (query.SelectList.Count > 0) dbType = DetermineDbType(query.SelectList[0]); } return dbType; }