public static string AddSelectClause <T>(DatabaseProvider provider, string sql) { sql = sql.Trim(); if (sql.StartsWith(";")) { return(sql.Substring(1)); } if (!rxSelect.IsMatch(sql)) { var pd = PocoData.ForType(typeof(T)); var tableName = provider.EscapeTableName(pd.TableInfo.TableName); StringBuilder stringBuilder = new StringBuilder(); foreach (var item in pd.Columns) { var col = item.Value; if (col.ResultColumn) { if (string.IsNullOrEmpty(col.ResultSql) == false) { stringBuilder.Append(","); stringBuilder.AppendFormat(col.ResultSql, tableName + "."); stringBuilder.Append(" AS '"); stringBuilder.Append(col.ColumnName); stringBuilder.Append("'"); } } else { stringBuilder.Append(","); stringBuilder.AppendFormat("{0}.{1}", tableName, provider.EscapeSqlIdentifier(col.ColumnName)); } } if (stringBuilder.Length == 0) { throw new NoColumnException(); } stringBuilder.Remove(0, 1); if (!rxFrom.IsMatch(sql)) { sql = $"SELECT {stringBuilder.ToString()} FROM {tableName} {sql}"; } else { sql = $"SELECT {stringBuilder.ToString()} {sql}"; } } return(sql); }
public static string AddSelectClause <T>(DatabaseProvider DatabaseType, string sql, TableNameManger manger) { if (sql.StartsWith(";")) { return(sql.Substring(1)); } if (rxSelect.IsMatch(sql)) { return(sql); } var type = typeof(T); var selectHeaders = selectClause.Get(Tuple.Create(type, DatabaseType), () => { var pd = PocoData.ForType(typeof(T)); var tableName = DatabaseType.EscapeTableName(pd.TableInfo.TableName); StringBuilder sb = new StringBuilder(); foreach (var col in pd.Columns) { if (sb.Length > 0) { sb.Append(","); } if (col.ResultColumn && string.IsNullOrEmpty(col.ResultSql) == false) { sb.AppendFormat(col.ResultSql, tableName + "."); sb.Append(" AS '"); sb.Append(col.ColumnName); sb.Append("'"); } else { sb.Append(tableName); sb.Append("."); sb.Append(DatabaseType.EscapeSqlIdentifier(col.ColumnName)); } } if (sb.Length == 0) { sb.Append("NULL"); } sb.Insert(0, "SELECT "); return(sb.ToString()); }); StringBuilder s = new StringBuilder(); s.Append(selectHeaders); if (!rxFrom.IsMatch(sql)) { s.Append(" FROM "); var tableName2 = DatabaseType.EscapeTableName(PocoData.ForType(typeof(T)).TableInfo.TableName); s.Append(tableName2); } s.Append(" "); s.Append(sql); return(s.ToString()); }