using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using Ant.Frame;
using Ant.Data;
namespace Ant.ORM
{
class OleDbQueryCommandBuilder : QueryCommandBuilder
{
public override QueryCommand GetQueryCommand()
{
QueryCommand cmd = null;
EntityPersistType str = (!object.Equals(PersistType, null)) ? PersistType : Md.PersistType;
switch (str)
{
case EntityPersistType.Save:
cmd = ParserInsertCommand();
break;
case EntityPersistType.Update:
cmd = ParserUpdateCommand();
break;
case EntityPersistType.Delete:
cmd = ParserDeleteCommand();
break;
case EntityPersistType.Query:
cmd = ParserSelectCommand();
break;
case EntityPersistType.Sum:
cmd = ParserSumCommand();
break;
}
return cmd;
}
///
/// ½âÎöInsert SQL
///
///
private QueryCommand ParserInsertCommand()
{
QueryCommand qc = new QueryCommand();
//StringBuilder sql = new StringBuilder();
//sql.AppendFormat("INSERT INTO [{0}]",Md.FiledMeta.TableName);
//List columns = new List();
//List param = new List();
//List value = new List();
//foreach (string key in Fields.Keys)
//{
// if (!Md.FiledMeta.FieldMeteDatas[key].IsAutoincrement)
// {
// columns.Add(string.Format("[{0}]", Md.FiledMeta.FieldMeteDatas[key].ColumnName));
// param.Add("@" + Md.FiledMeta.FieldMeteDatas[key].ColumnName);
// QueryParameter parameter = new QueryParameter();
// parameter.ParameterName = "@" + Md.FiledMeta.FieldMeteDatas[key].ColumnName;
// parameter.Value = Fields[key];
// qc.Parameters.Add(parameter);
// value.Add(string.Format("'{0}'", Fields[key].ToString()));
// }
//}
////sql.AppendFormat("({0}) VALUES({1})", string.Join(",", columns.ToArray()), string.Join(",", param.ToArray()));
//sql.AppendFormat("({0}) VALUES({1})", string.Join(",", columns.ToArray()), string.Join(",", param.ToArray()));
//qc.CommandText = sql.ToString();
return qc;
}
private QueryCommand ParserUpdateCommand()
{
QueryCommand qc = new QueryCommand();
//StringBuilder sql = new StringBuilder();
//sql.AppendFormat("UPDATE [{0}] SET ", Md.FiledMeta.TableName);
//List updateColumns = new List();
//List condition = new List();
//foreach (string key in Fields.Keys)
//{
// if (!Md.FiledMeta.FieldMeteDatas[key].IsPrimaryKey)
// {
// updateColumns.Add(string.Format("[{0}]=@{0}", Md.FiledMeta.FieldMeteDatas[key].ColumnName));
// qc.Parameters.Add("@" + Md.FiledMeta.FieldMeteDatas[key].ColumnName, Fields[key]);
// }
//}
//foreach (string key in Fields.Keys)
//{
// if (Md.FiledMeta.FieldMeteDatas[key].IsPrimaryKey)
// {
// condition.Add(string.Format("[{0}]=@{0}", Md.FiledMeta.FieldMeteDatas[key].ColumnName));
// qc.Parameters.Add("@" + Md.FiledMeta.FieldMeteDatas[key].ColumnName, Fields[key]);
// }
//}
//sql.Append(string.Join(",", updateColumns.ToArray())).Append(" WHERE ").Append(string.Join(" AND ", condition.ToArray()));
//qc.CommandText = sql.ToString();
return qc;
}
private QueryCommand ParserDeleteCommand()
{
QueryCommand qc = new QueryCommand();
StringBuilder sql = new StringBuilder();
//sql.AppendFormat("DELETE FROM [{0}]", Md.FiledMeta.TableName);
//List primaryKeys = new List();
//foreach (DataFieldMetaData df in Md.FiledMeta.FieldMeteDatas.Values)
//{
// if (df.IsPrimaryKey)
// {
// primaryKeys.Add(string.Format("[{0}]=@{0}", df.ColumnName));
// qc.Parameters.Add("@" + df.ColumnName, df.ColumnType, Fields[df.PropertyName]);
// }
//}
//sql.AppendFormat("WHERE {0}", string.Join(" AND ", primaryKeys.ToArray()));
//qc.CommandText = sql.ToString();
return qc;
}
private QueryCommand ParserSelectCommand()
{
QueryCommand qc = new QueryCommand();
//StringBuilder sql = new StringBuilder();
//List columns = new List();
//foreach (DataFieldMetaData df in Md.FiledMeta.FieldMeteDatas.Values)
//{
// columns.Add(string.Format("[{0}]", df.ColumnName));
//}
//sql.AppendFormat("SELECT {0} FROM [{1}]", string.Join(",", columns.ToArray()), Md.FiledMeta.Table.Name);
//if (!string.IsNullOrEmpty(Md.WhereSql))
//{
// sql.AppendFormat(" WHERE {0}", Md.WhereSql);
//}
//qc.CommandText = sql.ToString();
//qc.MaxRecords = PageSize;
//qc.StartRecord = PageSize * PageNo;
return qc;
}
private QueryCommand ParserSumCommand()
{
QueryCommand qc = new QueryCommand();
StringBuilder sql = new StringBuilder();
sql.AppendFormat("SELECT COUNT(*) FROM {0}", Md.FiledMeta.Table.Name);
if (!string.IsNullOrEmpty(Md.WhereSql))
{
sql.AppendFormat(" WHERE {0}", Md.WhereSql);
}
qc.CommandText = sql.ToString();
return qc;
}
///
/// ×ÔÔö³¤
///
///
public string GetLastInsertID()
{
return "SELECT @@IDENTITY;";
}
}
}