AzureKit is a nice piece of source code released on CodePlex by Mark Rendle. The AzureKit makes life much easier for creating, searching, deleting elements in your Azure’s Table Storage.
My idea was that if the AzureKit was easy enough to use, then it could give us a nice way of accessing Azure’s table storage without to hosted in Azure itself.
Given, this idea I recently spend a bit of time exploring the APIs and how they could be used from COBOL and to be honest it was a pleasure to use, so thank you Mark for the good work.
For anyone not familar with Azure Table Storage, it is a structured storage that uses tables.. sounds obvious. It does not have a SQL interface, so it is marked as a NoSQL storage mechanism.
The normal Azure Table Storage APIs are fine but reasonably complicated… perhaps too complicated for most people to use.
The APIs Mark has put together really does make life easier.
The AzureKit provides you with an IDictionary, IEnumerable and IQueryable style interface which for anyone familar with .Net this API style will feel very natural to them, so I think it gives you a nice programming model.
This combined with Visual COBOL’s support for doing ‘perform thru’ on IQueryable objects make its easy to use.. Anyway enough talking time for some code…
data division. procedure division. *> Delete ALL *> All two items set movie to type AzureKit.Table::NewRow( *> query set movieIQuery to type System.Linq.Queryable::AsQueryable[ set movie to type System.Linq.Queryable::FirstOrDefault[ display movie::Item("PartitionKey") " -> " *> show the results goback. end program Program1.
working-storage section.
01 movieTable type AzureKit.Table.
01 movie type IDictionary[string, object].
01 movieQuery type IEnumerable[
type IDictionary[string, object]].
01 movieIQuery type System.Linq.IQueryable[
type IDictionary[string, object]].
set type Azure::Account to "mystorageaccount"
set type Azure::SharedKey to "myverylargesharedkey.........."
set movieTable to new type AzureKit.Table("Movie",
type AzureKit.IfTableDoesNotExist::CreateIt)
perform varying movie thru movieTable::GetAllRows()
invoke movieTable::Delete(movie)
end-perform
set movie to type AzureKit.Table::NewRow(
"Jaws: The Revenge",
type Guid::NewGuid()::ToString())
set movie::Item("Year") to 1987
set movie::Item("Director") to "Joseph Sargent"
set movie::Item("Rating") to "Worst Movie Ever!"
invoke movieTable::InsertRow(movie)
"Empire Strikes Back",
type Guid::NewGuid()::ToString())
set movie::Item("Year") to 1982
set movie::Item("Director") to "George Lucas"
set movie::Item("Rating") to "Best Movie Ever!"
invoke movieTable::InsertRow(movie)
set movieQuery to movieTable::Query(
"PartitionKey eq 'Jaws: The Revenge'")
type IDictionary[
string, object]](movieQuery)
type IDictionary[
string, object]](movieIQuery)
movie::Item("Director") " -> "
movie::Item("RowKey")
perform varying movie thru movieQuery
display movie::Item("PartitionKey") " -> "
movie::Item("Director") " -> "
movie::Item("RowKey")
end-perform
That’s pretty easy… now what shall I do with the APIs… answers on the comment strip!
http://blog.markrendle.net/
http://azurekit.codeplex.com/
http://msdn.microsoft.com/en-us/library/dd179423.aspx