blob: ffca5d701e4462609851c6d3b5c211db15d9fea3 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
namespace Apache.Ignite.Examples.Thick.Sql.Dml
{
using System;
using Apache.Ignite.Core;
using Apache.Ignite.Core.Cache;
using Apache.Ignite.Core.Cache.Configuration;
using Apache.Ignite.Core.Cache.Query;
using Apache.Ignite.Examples.Shared;
using Apache.Ignite.Examples.Shared.Models;
/// <summary>
/// This example showcases DML capabilities of the Ignite SQL engine.
/// </summary>
public static class Program
{
private const string OrganizationCacheName = "dotnet_cache_query_dml_organization";
private const string EmployeeCacheName = "dotnet_cache_query_dml_employee";
public static void Main()
{
using (var ignite = Ignition.Start(Utils.GetServerNodeConfiguration()))
{
Console.WriteLine();
Console.WriteLine(">>> Cache query DML example started.");
var employeeCache = ignite.GetOrCreateCache<int, Employee>(
new CacheConfiguration(EmployeeCacheName, new QueryEntity(typeof(int), typeof(Employee))));
var organizationCache = ignite.GetOrCreateCache<int, Organization>(new CacheConfiguration(
OrganizationCacheName, new QueryEntity(typeof(int), typeof(Organization))));
employeeCache.Clear();
organizationCache.Clear();
Insert(organizationCache, employeeCache);
Select(employeeCache, "Inserted data");
Update(employeeCache);
Select(employeeCache, "Update salary for ASF employees");
Delete(employeeCache);
Select(employeeCache, "Delete non-ASF employees");
Console.WriteLine();
}
Console.WriteLine();
Console.WriteLine(">>> Example finished, press any key to exit ...");
Console.ReadKey();
}
/// <summary>
/// Selects and displays Employee data.
/// </summary>
private static void Select(ICache<int, Employee> employeeCache, string message)
{
Console.WriteLine("\n>>> {0}", message);
var qry = new SqlFieldsQuery(string.Format(
"select emp._key, emp.name, org.name, emp.salary " +
"from Employee as emp, " +
"\"{0}\".Organization as org " +
"where emp.organizationId = org._key", OrganizationCacheName))
{
EnableDistributedJoins = true
};
using (var cursor = employeeCache.Query(qry))
{
foreach (var row in cursor)
{
Console.WriteLine(">>> {0}: {1}, {2}, {3}", row[0], row[1], row[2], row[3]);
}
}
}
/// <summary>
/// Populates cache with test data.
/// </summary>
private static void Insert(ICache<int, Organization> organizationCache, ICache<int, Employee> employeeCache)
{
// Insert organizations.
var qry = new SqlFieldsQuery("insert into Organization (_key, name) values (?, ?)", 1, "ASF");
organizationCache.Query(qry);
qry.Arguments = new object[] {2, "Eclipse"};
organizationCache.Query(qry);
// Insert employees.
qry = new SqlFieldsQuery("insert into Employee (_key, name, organizationId, salary) values (?, ?, ?, ?)");
qry.Arguments = new object[] {1, "John Doe", 1, 4000};
employeeCache.Query(qry);
qry.Arguments = new object[] {2, "Jane Roe", 1, 5000};
employeeCache.Query(qry);
qry.Arguments = new object[] {3, "Mary Major", 2, 2000};
employeeCache.Query(qry);
qry.Arguments = new object[] {4, "Richard Miles", 2, 3000};
employeeCache.Query(qry);
}
/// <summary>
/// Conditional UPDATE query: raise salary for ASF employees.
/// </summary>
/// <param name="employeeCache">Employee cache.</param>
private static void Update(ICache<int, Employee> employeeCache)
{
var qry = new SqlFieldsQuery("update Employee set salary = salary * 1.1 where organizationId = ?", 1);
employeeCache.Query(qry);
}
/// <summary>
/// Conditional DELETE query: remove non-ASF employees.
/// </summary>
/// <param name="employeeCache">Employee cache.</param>
private static void Delete(ICache<int, Employee> employeeCache)
{
var qry = new SqlFieldsQuery("delete from Employee where organizationId != ?", 1);
employeeCache.Query(qry);
}
}
}