Dryad/LinqToDryad/VertexCodeGen.cs

357 lines
14 KiB
C#
Raw Blame History

/*
Copyright (c) Microsoft Corporation
All rights reserved.
Licensed 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
THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER
EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF
TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions and
limitations under the License.
*/
//
// <20> Microsoft Corporation. All rights reserved.
//
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Reflection;
using System.Linq;
using System.Linq.Expressions;
using System.CodeDom;
using System.Diagnostics;
using System.Xml;
using System.Data.Linq.Mapping;
using System.Data.Linq;
using Microsoft.Research.DryadLinq.Internal;
namespace Microsoft.Research.DryadLinq
{
internal class VertexCodeGen
{
internal virtual IEnumerable<string> GetResources()
{
return new string[0];
}
internal virtual string AddVertexCode(DryadQueryNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
switch (node.NodeType)
{
case QueryNodeType.InputTable:
{
return this.Visit((DryadInputNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.OutputTable:
{
return this.Visit((DryadOutputNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.Aggregate:
{
return this.Visit((DryadAggregateNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.Select:
case QueryNodeType.SelectMany:
{
return this.Visit((DryadSelectNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.Where:
{
return this.Visit((DryadWhereNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.Distinct:
{
return this.Visit((DryadDistinctNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.BasicAggregate:
{
return this.Visit((DryadBasicAggregateNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.GroupBy:
{
return this.Visit((DryadGroupByNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.OrderBy:
{
return this.Visit((DryadOrderByNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.Skip:
case QueryNodeType.SkipWhile:
case QueryNodeType.Take:
case QueryNodeType.TakeWhile:
{
return this.Visit((DryadPartitionOpNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.Contains:
{
return this.Visit((DryadContainsNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.Join:
case QueryNodeType.GroupJoin:
{
return this.Visit((DryadJoinNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.Union:
case QueryNodeType.Intersect:
case QueryNodeType.Except:
{
return this.Visit((DryadSetOperationNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.Concat:
{
return this.Visit((DryadConcatNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.Zip:
{
return this.Visit((DryadZipNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.Super:
{
return this.Visit((DryadSuperNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.RangePartition:
{
return this.Visit((DryadRangePartitionNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.HashPartition:
{
return this.Visit((DryadHashPartitionNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.Merge:
{
return this.Visit((DryadMergeNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.Apply:
{
return this.Visit((DryadApplyNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.Fork:
{
return this.Visit((DryadForkNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.Tee:
{
return this.Visit((DryadTeeNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.Dynamic:
{
return this.Visit((DryadDynamicNode)node, vertexMethod, readerNames, writerNames);
}
case QueryNodeType.Dummy:
{
return this.Visit((DryadDummyNode)node, vertexMethod, readerNames, writerNames);
}
default:
throw new DryadLinqException("Internal error: unhandled node type " + node.NodeType);
}
}
internal virtual string Visit(DryadInputNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadOutputNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadWhereNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadSelectNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadZipNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadOrderByNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadGroupByNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadPartitionOpNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadJoinNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadDistinctNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadContainsNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadBasicAggregateNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadAggregateNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadConcatNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadSetOperationNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadMergeNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadHashPartitionNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadRangePartitionNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadSuperNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadApplyNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadForkNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadTeeNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadDynamicNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
internal virtual string Visit(DryadDummyNode node,
CodeMemberMethod vertexMethod,
string[] readerNames,
string[] writerNames)
{
return node.AddVertexCode(vertexMethod, readerNames, writerNames);
}
}
}