protected void RequireClauses(SqlClause clause) { var err = new Func <string>(() => { return(" is required for an " + QueryType.ToString() + " query."); }); if (clause.HasFlag(SqlClause.Table) && String.IsNullOrEmpty(TableName)) { throw new IQException("TableName" + err()); } if (clause.HasFlag(SqlClause.Select) && String.IsNullOrEmpty(Select)) { throw new IQException("A SELECT clause" + err()); } if (clause.HasFlag(SqlClause.From) && String.IsNullOrEmpty(From)) { throw new IQException("A FROM clause" + err()); } if (clause.HasFlag(SqlClause.Where) && Where.IsEmpty) { throw new IQException("A WHERE clause" + err()); } if (clause.HasFlag(SqlClause.UpdateSet) && String.IsNullOrEmpty(UpdateSet)) { throw new IQException("TableName" + err()); } if (clause.HasFlag(SqlClause.InsertFields) && String.IsNullOrEmpty(InsertFields)) { throw new IQException("TableName" + err()); } }
protected void RequireClauses(SqlClause clause) { var err = new Func<string>(() => { return " is required for an " + QueryType.ToString() + " query."; }); if (clause.HasFlag(SqlClause.Table) && String.IsNullOrEmpty(TableName)) { throw new IQException("TableName" + err()); } if (clause.HasFlag(SqlClause.Select) && String.IsNullOrEmpty(Select)) { throw new IQException("A SELECT clause" + err()); } if (clause.HasFlag(SqlClause.From) && String.IsNullOrEmpty(From)) { throw new IQException("A FROM clause" + err()); } if (clause.HasFlag(SqlClause.Where) && Where.IsEmpty) { throw new IQException("A WHERE clause" + err()); } if (clause.HasFlag(SqlClause.UpdateSet) && String.IsNullOrEmpty(UpdateSet)) { throw new IQException("TableName" + err()); } if (clause.HasFlag(SqlClause.InsertFields) && String.IsNullOrEmpty(InsertFields)) { throw new IQException("TableName" + err()); } }
/// <summary> /// Return the SQL for this query /// </summary> /// <returns></returns> public string GetQuery(SqlClause clause) { //if (String.IsNullOrEmpty(PrimaryKey) || String.IsNullOrEmpty(TableName)) { // throw new InvalidOperationException("Missing primary key or table name."); //} SqlClause required; switch (QueryType) { case QueryType.Select: // special case for select: nothing is required, so we can extract parts required = SqlClause.Select ; RequireClauses(required); /// <summary> /// This may not actually create a query that is valid SQL in every (or even any) language. The SQL output from the IQuery/ /// ISqlQueryMaker object is not intended to be used directly by a SQL engine, rather, it is supposed to generate a unique /// query for each distict conceptual query, and provide component parts that a DataStorageController can use to map to a /// particular engine's implementation. /// </summary> /// return String.Format("{0}{1}{2}{3}{4}{5}{6}", (clause.HasFlag(SqlClause.Select)) ? "SELECT " + Select : "", (clause.HasFlag(SqlClause.From) && !String.IsNullOrEmpty(From)) ? " FROM " + From : "", (clause.HasFlag(SqlClause.Where) && !Where.IsEmpty) ? " WHERE " + Where : "", (clause.HasFlag(SqlClause.GroupBy) && !String.IsNullOrEmpty(GroupBy)) ? " GROUP BY " + GroupBy : "", (clause.HasFlag(SqlClause.Having) && !String.IsNullOrEmpty(Having)) ? " HAVING " + Having : "", (clause.HasFlag(SqlClause.OrderBy) && !OrderBy.IsEmpty) ? " ORDER BY " + OrderBy : "", (clause.HasFlag(SqlClause.Limit) && (TotalRows>0 || FirstRow>0)) ? (" LIMIT " + FirstRow+"," + TotalRows) : "" ).Trim(); case QueryType.Delete: required = SqlClause.Table | SqlClause.Where; RequireClauses(required); return String.Format("DELETE FROM {0} WHERE {1}", TableName, Where); case QueryType.Update: required = SqlClause.Table | SqlClause.Where | SqlClause.UpdateSet; RequireClauses(required); // TODO: From queries return String.Format("UPDATE {0} SET {1} WHERE {2}", TableName, UpdateSet, Where); case QueryType.Insert: RequireClauses(SqlClause.Table | SqlClause.InsertFields); return String.Format("INSERT INTO {0} {1} VALUES {2}", TableName, InsertFields, InsertValues); default: throw new InvalidOperationException("Unsupported query type."); } }
/// <summary> /// Return the SQL for this query /// </summary> /// <returns></returns> public string GetQuery(SqlClause clause) { //if (String.IsNullOrEmpty(PrimaryKey) || String.IsNullOrEmpty(TableName)) { // throw new InvalidOperationException("Missing primary key or table name."); //} SqlClause required; switch (QueryType) { case QueryType.Select: // special case for select: nothing is required, so we can extract parts required = SqlClause.Select; RequireClauses(required); /// <summary> /// This may not actually create a query that is valid SQL in every (or even any) language. The SQL output from the IQuery/ /// ISqlQueryMaker object is not intended to be used directly by a SQL engine, rather, it is supposed to generate a unique /// query for each distict conceptual query, and provide component parts that a DataStorageController can use to map to a /// particular engine's implementation. /// </summary> /// return(String.Format("{0}{1}{2}{3}{4}{5}{6}", (clause.HasFlag(SqlClause.Select)) ? "SELECT " + Select : "", (clause.HasFlag(SqlClause.From) && !String.IsNullOrEmpty(From)) ? " FROM " + From : "", (clause.HasFlag(SqlClause.Where) && !Where.IsEmpty) ? " WHERE " + Where : "", (clause.HasFlag(SqlClause.GroupBy) && !String.IsNullOrEmpty(GroupBy)) ? " GROUP BY " + GroupBy : "", (clause.HasFlag(SqlClause.Having) && !String.IsNullOrEmpty(Having)) ? " HAVING " + Having : "", (clause.HasFlag(SqlClause.OrderBy) && !OrderBy.IsEmpty) ? " ORDER BY " + OrderBy : "", (clause.HasFlag(SqlClause.Limit) && (TotalRows > 0 || FirstRow > 0)) ? (" LIMIT " + FirstRow + "," + TotalRows) : "" ).Trim()); case QueryType.Delete: required = SqlClause.Table | SqlClause.Where; RequireClauses(required); return(String.Format("DELETE FROM {0} WHERE {1}", TableName, Where)); case QueryType.Update: required = SqlClause.Table | SqlClause.Where | SqlClause.UpdateSet; RequireClauses(required); // TODO: From queries return(String.Format("UPDATE {0} SET {1} WHERE {2}", TableName, UpdateSet, Where)); case QueryType.Insert: RequireClauses(SqlClause.Table | SqlClause.InsertFields); return(String.Format("INSERT INTO {0} {1} VALUES {2}", TableName, InsertFields, InsertValues)); default: throw new InvalidOperationException("Unsupported query type."); } }