Ejemplo n.º 1
0
		public override ISqlExpression GetIdentityExpression(SqlTable table, SqlField identityField, bool forReturning)
		{
			if (table.SequenceAttributes != null)
				return new SqlExpression("GEN_ID(" + table.SequenceAttributes[0].SequenceName + ", 1)", Precedence.Primary);

			return base.GetIdentityExpression(table, identityField, forReturning);
		}
Ejemplo n.º 2
0
		public override ISqlExpression GetIdentityExpression(SqlTable table)
		{
			if (!table.SequenceAttributes.IsNullOrEmpty())
				return new SqlExpression("GEN_ID(" + table.SequenceAttributes[0].SequenceName + ", 1)", Precedence.Primary);

			return base.GetIdentityExpression(table);
		}
		public virtual void SetTable(SqlTable table, MemberInfo member, IEnumerable<Expression> arguments, IEnumerable<ISqlExpression> sqlArgs)
		{
			table.SqlTableType   = SqlTableType.Function;
			table.Name           = Name ?? member.Name;
			table.PhysicalName   = Name ?? member.Name;
			table.TableArguments = ConvertArgs(member, sqlArgs.ToArray());
		}
Ejemplo n.º 4
0
        public static SqlTable getTableFromRawSql(string rawSql)
        {
            SqlTable sqlTable = new SqlTable();
            using (SqlConnection connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["BROWSitContext"].ConnectionString))
            {
                using (SqlDataAdapter adapter = new SqlDataAdapter(rawSql, connection))
                {
                    try
                    {
                        adapter.Fill(sqlTable.contents);
                    }
                    catch (SqlException e)
                    {
                        //sqlTable.errors = e.Errors;
                        foreach (SqlError se in e.Errors)
                        {
                            sqlTable.errorStrings.Add("Message: " + se.Message
                                + " | Number: " + se.Number
                                + " | Line: " + se.LineNumber
                                + " | Source: " + se.Source
                                + " | Procedure: " + se.Procedure);
                        }
                    }
                }
            }

            return sqlTable;
        }
Ejemplo n.º 5
0
        public void ExpressionType_ReturnsJoin()
        {
            var table = new SqlTable("dbo.Users", "u");
            var predicate = SqlExpression.Equal("u.Id", 5);
            var expression = new SqlJoin(SqlJoinType.Left, table);

            Assert.Equal(SqlExpressionType.Join, expression.ExpressionType);
        }
Ejemplo n.º 6
0
        public void Ctor_WithTableName_SetsTableNameProperty()
        {
            var table = new SqlTable("[dbo].[Users]");

            Assert.NotNull(table.TableName);
            Assert.Equal("dbo", table.TableName.Segments[0]);
            Assert.Equal("Users", table.TableName.Segments[1]);
        }
			public override void SetTable(MappingSchema mappingSchema, SqlTable table, MemberInfo member, IEnumerable<Expression> arguments, IEnumerable<ISqlExpression> sqlArgs)
			{
				table.SqlTableType   = SqlTableType.Expression;
				table.Name           = Expression ?? member.Name;
				table.TableArguments = ConvertArgs(member, sqlArgs.ToArray());

				if (Schema   != null) table.Owner    = Schema;
				if (Database != null) table.Database = Database;
			}
Ejemplo n.º 8
0
        public void Test()
        {
            var schema = new MappingSchema();
            schema.SetDataType(typeof (decimal), new SqlDataType(DataType.Decimal, 19, 4));

            var table = new SqlTable<Foo>(schema);

            Assert.That(table.Fields.Single().Value.Precision, Is.EqualTo(19));
            Assert.That(table.Fields.Single().Value.Scale, Is.EqualTo(4));
        }
Ejemplo n.º 9
0
        public void ImplicitConversion_WithAlias_ReturnsColumn()
        {
            var table = new SqlTable("[dbo].[Users]", "u");
            var column = table + "Id";

            Assert.NotNull(column);
            Assert.Equal(2, column.ColumnName.Segments.Length);
            Assert.Equal("u", column.ColumnName.Segments.First());
            Assert.Equal("Id", column.ColumnName.Segments.Last());
        }
Ejemplo n.º 10
0
        public override ISqlExpression GetIdentityExpression(SqlTable table)
        {
            if (!table.SequenceAttributes.IsNullOrEmpty())
            {
                var attr = GetSequenceNameAttribute(table, false);

                if (attr != null)
                    return new SqlExpression(attr.SequenceName + ".nextval", Precedence.Primary);
            }

            return base.GetIdentityExpression(table);
        }
Ejemplo n.º 11
0
		public override ISqlExpression GetIdentityExpression(SqlTable table, SqlField identityField, bool forReturning)
		{
			if (table.SequenceAttributes != null)
			{
				var attr = GetSequenceNameAttribute(table, false);

				if (attr != null)
					return new SqlExpression(attr.SequenceName + ".nextval", Precedence.Primary);
			}

			return base.GetIdentityExpression(table, identityField, forReturning);
		}
        public override void SetTable(SqlTable table, MemberInfo member, IEnumerable<Expression> expArgs, IEnumerable<ISqlExpression> sqlArgs)
        {
            var aargs  = sqlArgs.ToArray();
            var arr    = ConvertArgs(member, aargs).ToList();
            var method = (MethodInfo)member;

            {
                var ttype  = method.GetGenericArguments()[0];
                var tbl    = new SqlTable(ttype);

                var database     = Convert(tbl.Database);
                var owner        = Convert(tbl.Owner);
                var physicalName = Convert(tbl.PhysicalName);

                var name = "";

                if (database != null)
                    name = database + "." + (owner == null ? "." : owner + ".");
                else if (owner != null)
                    name = owner + ".";

                name += physicalName;

                arr.Add(new SqlExpression(name, Precedence.Primary));
            }

            {
                var field = ((ConstantExpression)expArgs.First()).Value;

                if (field is string)
                {
                    arr[0] = new SqlExpression(field.ToString(), Precedence.Primary);
                }
                else if (field is LambdaExpression)
                {
                    var body = ((LambdaExpression)field).Body;

                    if (body is MemberExpression)
                    {
                        var name = ((MemberExpression)body).Member.Name;

                        if (name.Length > 0 && name[0] != '[')
                            name = "[" + name + "]";

                        arr[0] = new SqlExpression(name, Precedence.Primary);
                    }
                }
            }

            table.SqlTableType   = SqlTableType.Expression;
            table.Name           = "FREETEXTTABLE({6}, {2}, {3}) {1}";
            table.TableArguments = arr.ToArray();
        }
Ejemplo n.º 13
0
        public void Select_WithGroupByWithRealLifeQuery_ReturnsQuery()
        {
            SqlTable profiles = new SqlTable("Profile", "p");
            var actual = Sql
                .Select(profiles + "Age", SqlAggregate.Count(profiles + "Id", "Count"))
                .From(profiles)
                .GroupBy(profiles + "Age")
                .Having(SqlExpression.GreaterThanOrEqual(profiles + "Age", 18))
                .ToSql();

            const string expected = "SELECT [p].[Age], COUNT([p].[Id]) AS [Count] FROM [Profile] [p] GROUP BY ([p].[Age]) HAVING [p].[Age] >= 18";
            Assert.Equal(expected, actual);
        }
Ejemplo n.º 14
0
        public void Ctor_WithTableAndPredicate_SetsPropertyValues()
        {
            var table = new SqlTable("dbo.Users", "u");
            var predicate = SqlExpression.Equal("u.Id", 5);
            var expression = new SqlJoin(SqlJoinType.Left, table, predicate);

            Assert.NotNull(expression.Table);
            Assert.Same(table, expression.Table);
            Assert.NotNull(expression.On);
            Assert.NotNull(expression.On.Predicate);
            Assert.Same(predicate, expression.On.Predicate);
            Assert.Equal(SqlJoinType.Left, expression.Type);
        }
Ejemplo n.º 15
0
        public void Union_WithRealLifeQuery_ReturnsQuery()
        {
            SqlTable suppliers = new SqlTable("Supplier", "s");
            SqlTable customers = new SqlTable("Customer", "c");
            var actual = Sql
                .Union(
                    Sql.Select(suppliers + "City").From(suppliers),
                    Sql.Select(customers + "City").From(customers))
                .ToSql();

            const string expected = "(SELECT [s].[City] FROM [Supplier] [s]) UNION (SELECT [c].[City] FROM [Customer] [c])";
            Assert.Equal(expected, actual);
        }
Ejemplo n.º 16
0
			protected override SqlQuery ProcessQuery(SqlQuery sqlQuery)
			{
				if (sqlQuery.QueryType == QueryType.Insert && sqlQuery.Set.Into.Name == "Parent")
				{
					var expr =
						new QueryVisitor().Find(sqlQuery.Set, e =>
						{
							if (e.ElementType == QueryElementType.SetExpression)
							{
								var se = (SqlQuery.SetExpression)e;
								return ((SqlField)se.Column).Name == "ParentID";
							}

							return false;
						}) as SqlQuery.SetExpression;

					if (expr != null)
					{
						var value = ConvertTo<int>.From(((IValueContainer)expr.Expression).Value);

						if (value == 555)
						{
							var tableName = "Parent1";
							var dic       = new Dictionary<IQueryElement,IQueryElement>();

							sqlQuery = new QueryVisitor().Convert(sqlQuery, e =>
							{
								if (e.ElementType == QueryElementType.SqlTable)
								{
									var oldTable = (SqlTable)e;

									if (oldTable.Name == "Parent")
									{
										var newTable = new SqlTable(oldTable) { Name = tableName, PhysicalName = tableName };

										foreach (var field in oldTable.Fields.Values)
											dic.Add(field, newTable.Fields[field.Name]);

										return newTable;
									}
								}

								IQueryElement ex;
								return dic.TryGetValue(e, out ex) ? ex : null;
							});
						}
					}
				}

				return sqlQuery;
			}
Ejemplo n.º 17
0
        public void Select_WithRealLifeQuery_ReturnsQuery()
        {
            SqlTable users = new SqlTable("User", "u");
            SqlTable profiles = new SqlTable("Profile", "p");
            var actual = Sql
                .Select(users + "Id", users + "Name", users + "Email", profiles + "Avatar", profiles + "Birthday")
                .From(users)
                .LeftJoin(profiles).On(SqlExpression.Equal(users + "Id", profiles + "UserId"))
                .Where(SqlExpression.Equal(profiles + "Age", 18))
                .OrderBy(users + "Name")
                .ToSql();

            const string expected = "SELECT [u].[Id], [u].[Name], [u].[Email], [p].[Avatar], [p].[Birthday] FROM [User] [u] LEFT JOIN [Profile] [p] ON [u].[Id] = [p].[UserId] WHERE [p].[Age] = 18 ORDER BY [u].[Name]";
            Assert.Equal(expected, actual);
        }
        public void ToSql_WithSelectWithInnerJoinWithOrderByClauseWithWhereClause_WritesCorrectSql()
        {
            var foo = new SqlTable("foo", "f");
            var bar = new SqlTable("bar", "b");

            var sql = Sql
                .Select(foo + "Id", foo + "Name", bar + "Email")
                .From(foo)
                .InnerJoin(bar, SqlExpression.Equal(foo + "Id", bar + "FooId"))
                .Where(SqlExpression.Equal(foo + "Id", 5))
                .OrderBy("Id", SqlSortOrder.Descending)
                .OrderBy("Name")
                .ToSql();

            Assert.AreEqual("SELECT [f].[Id], [f].[Name], [b].[Email] FROM [foo] [f] INNER JOIN [bar] [b] ON ([f].[Id] = [b].[FooId]) WHERE ([f].[Id] = 5) ORDER BY [Id] DESC, [Name] ASC", sql);
        }
Ejemplo n.º 19
0
 public void CreateTable(SqlTable table)
 {
     var columns = GetColumns(table);
     if (columns.Count > 0)
     {
         if (!CompareColumns(table, columns))
         {
             var from = new SqlTable(table.Name, columns);
             database.Query(AlterTableQuery(from, table));
         }
     }
     else
     {
         database.Query(CreateTableQuery(table));
     }
 }
Ejemplo n.º 20
0
 /// <summary>
 /// Alter a table from source to destination
 /// </summary>
 /// <param name="from">Must have name and column names. Column types are not required</param>
 /// <param name="to">Must have column names and column types.</param>
 /// <returns></returns>
 public string AlterTableQuery(SqlTable from, SqlTable to)
 {
     var rstr = rand.NextString(20);
     var alter = "ALTER TABLE '{0}' RENAME TO '{1}_{0}'".SFormat(from.Name, rstr);
     var create = CreateTableQuery(to);
     //combine all columns in the 'from' variable excluding ones that aren't in the 'to' variable.
     //exclude the ones that aren't in 'to' variable because if the column is deleted, why try to import the data?
     var insert = "INSERT INTO '{0}' ({1}) SELECT {1} FROM {2}_{0}".SFormat(from.Name, string.Join(", ", from.Columns.Where(c => to.Columns.Any(c2 => c2.Name == c.Name)).Select(c => c.Name).ToArray()), rstr);
     var drop = "DROP TABLE '{0}_{1}'".SFormat(rstr, from.Name);
     return "{0}; {1}; {2}; {3};".SFormat(alter, create, insert, drop);
     /*
         ALTER TABLE "main"."Bans" RENAME TO "oXHFcGcd04oXHFcGcd04_Bans"
         CREATE TABLE "main"."Bans" ("IP" TEXT PRIMARY KEY ,"Name" TEXT)
         INSERT INTO "main"."Bans" SELECT "IP","Name" FROM "main"."oXHFcGcd04oXHFcGcd04_Bans"
         DROP TABLE "main"."oXHFcGcd04oXHFcGcd04_Bans"
      * 
      */
 }
		public override void SetTable(MappingSchema mappingSchema, SqlTable table, MemberInfo member, IEnumerable<Expression> expArgs, IEnumerable<ISqlExpression> sqlArgs)
		{
			var method = member as MethodInfo;

			if (method == null)
				throw new ArgumentNullException("member");

			var paramsList = method.GetParameters().ToList();
			var valuesList = expArgs.Cast<ConstantExpression>().ToList();

			if (paramsList.Count != valuesList.Count)
				throw new TargetParameterCountException("Invalid number of parameters");

			var sqlValues = new List<ISqlExpression>();

			for(var i = 0; i < paramsList.Count; i++)
			{
				var val = valuesList[i].Value;
				if (val == null)
					continue;
				var p = paramsList[i];
				sqlValues.Add(new SqlValue("$$" + p.Name + "$$"));
				sqlValues.Add(new SqlValue(ValueToString(val)));
			}

			var arg = new ISqlExpression[1];

			arg[0] = new SqlExpression(
				String.Join(", ",
					Enumerable.Range(0, sqlValues.Count)
						.Select(x => "{" + x + "}")),
				sqlValues.ToArray());

			table.SqlTableType = SqlTableType.Expression;
			table.Name = "{0}('PLACEHOLDER' = {2}) {1}";
			table.TableArguments = arg.ToArray();
		}
Ejemplo n.º 22
0
 void restoreBackupTable(BackupTable bkup, DataAccessObject dao, int totalCount, ref int currentCount)
 {
     SqlTable table = new SqlTable(bkup.TableName);
     int progressCount = 0;
     foreach (object[] row in bkup.Data) {
         currentCount++;
         progressCount++;
         if (progressCount > 17) {
             if (WFContext.BreakExecution) return;
             WFContext.Description = "Inserting record " + currentCount + " of " + totalCount + " to \"" + table.TableName + "\"...";
             WFContext.SetProgress(currentCount, totalCount);
             progressCount = 0;
         }
         SqlQuery q = new SqlQuery(dao);
         q.Insert(table);
         int f = -1;
         foreach (object value in row) {
             switch ((DataValueType)bkup.FieldTypes[++f]) {
                 case DataValueType.BooleanType: q.Values(new SqlFieldBoolean(bkup.FieldNames[f], table), (bool)value); break;
                 case DataValueType.DateTimeType: q.Values(new SqlFieldDateTime(bkup.FieldNames[f], table), (DateTime)value); break;
                 case DataValueType.FloatType: q.Values(new SqlFieldFloat(bkup.FieldNames[f], table), (double)value); break;
                 case DataValueType.IntegerType: q.Values(new SqlFieldInteger(bkup.FieldNames[f], table), (int)value); break;
                 case DataValueType.ShortStringType: q.Values(new SqlFieldShortString(bkup.FieldNames[f], table), (string)value); break;
                 case DataValueType.LongStringType: q.Values(new SqlFieldLongString(bkup.FieldNames[f], table), (string)value); break;
                 default: break;
             }
         }
         q.ExecuteNonQuery();
     }
 }
Ejemplo n.º 23
0
		public override ISqlExpression GetIdentityExpression(SqlTable table)
		{
			if (!table.SequenceAttributes.IsNullOrEmpty())
			{
				var attr = GetSequenceNameAttribute(table, false);

				if (attr != null)
				{
					var name     = Convert(attr.SequenceName, ConvertType.NameToQueryTable).ToString();
					var database = GetTableDatabaseName(table);
					var owner    = GetTableOwnerName   (table);

					var sb = BuildTableName(new StringBuilder(), database, owner, name);

					return new SqlExpression("nextval('" + sb + "')", Precedence.Primary);
				}
			}

			return base.GetIdentityExpression(table);
		}
Ejemplo n.º 24
0
 internal override SqlTable VisitTable(SqlTable tab) {
     SqlTable nt = new SqlTable(tab.MetaTable, tab.RowType, tab.SqlRowType, tab.SourceExpression);
     this.nodeMap[tab] = nt;
     foreach (SqlColumn c in tab.Columns) {
         nt.Columns.Add((SqlColumn)this.Visit(c));
     }
     return nt;
 }
Ejemplo n.º 25
0
 internal GeneratedTypeDeclaration(CodeTypeDeclaration t, SqlTable table)
     : base(t)
 {
     this.GenericMappings.Add("`1", "<" + table.Name + ">");
 }
Ejemplo n.º 26
0
        protected override IBuildContext BuildMethodCall(ExpressionBuilder builder, MethodCallExpression methodCall, BuildInfo buildInfo)
        {
            var deleteType = methodCall.Method.Name switch
            {
                nameof(LinqExtensions.DeleteWithOutput) => DeleteContext.DeleteType.DeleteOutput,
                nameof(LinqExtensions.DeleteWithOutputInto) => DeleteContext.DeleteType.DeleteOutputInto,
                _ => DeleteContext.DeleteType.Delete,
            };

            var sequence = builder.BuildSequence(new BuildInfo(buildInfo, methodCall.Arguments[0]));

            if (methodCall.Arguments.Count == 2 && deleteType == DeleteContext.DeleteType.Delete)
            {
                sequence = builder.BuildWhere(buildInfo.Parent, sequence, (LambdaExpression)methodCall.Arguments[1].Unwrap(), false);
            }

            var deleteStatement = new SqlDeleteStatement(sequence.SelectQuery);

            sequence.Statement = deleteStatement;

            // Check association.
            //

            if (sequence is SelectContext ctx && ctx.IsScalar)
            {
                var res = ctx.IsExpression(null, 0, RequestFor.Association);

                if (res.Result)
                {
                    var isTableResult = res.Context !.IsExpression(null, 0, RequestFor.Table);
                    if (!isTableResult.Result)
                    {
                        throw new LinqException("Can not retrieve Table context from association.");
                    }

                    var atc = (TableBuilder.TableContext)isTableResult.Context !;
                    deleteStatement.Table = atc.SqlTable;
                }
                else
                {
                    res = ctx.IsExpression(null, 0, RequestFor.Table);

                    if (res.Result && res.Context is TableBuilder.TableContext context)
                    {
                        var tc = context;

                        if (deleteStatement.SelectQuery.From.Tables.Count == 0 || deleteStatement.SelectQuery.From.Tables[0].Source != tc.SelectQuery)
                        {
                            deleteStatement.Table = tc.SqlTable;
                        }
                    }
                }
            }

            var indexedParameters
                = methodCall.Method.GetParameters().Select((p, i) => Tuple.Create(p, i)).ToDictionary(t => t.Item1.Name, t => t.Item2);

            Expression GetArgumentByName(string name)
            {
                return(methodCall.Arguments[indexedParameters[name]]);
            }

            LambdaExpression GetOutputExpression(Type outputType)
            {
                if (!indexedParameters.TryGetValue("outputExpression", out var index))
                {
                    var param = Expression.Parameter(outputType);
                    return(Expression.Lambda(param, param));
                }

                return((LambdaExpression)methodCall.Arguments[index].Unwrap());
            }

            IBuildContext?   outputContext    = null;
            LambdaExpression?outputExpression = null;

            if (deleteType != DeleteContext.DeleteType.Delete)
            {
                outputExpression = GetOutputExpression(methodCall.Method.GetGenericArguments().Last());

                deleteStatement.Output = new SqlOutputClause();

                var deletedTable = SqlTable.Deleted(methodCall.Method.GetGenericArguments()[0]);

                outputContext = new TableBuilder.TableContext(builder, new SelectQuery(), deletedTable);

                deleteStatement.Output.DeletedTable = deletedTable;

                if (deleteType == DeleteContext.DeleteType.DeleteOutputInto)
                {
                    var outputTable = GetArgumentByName("outputTable");
                    var destination = builder.BuildSequence(new BuildInfo(buildInfo, outputTable, new SelectQuery()));

                    UpdateBuilder.BuildSetter(
                        builder,
                        buildInfo,
                        outputExpression,
                        destination,
                        deleteStatement.Output.OutputItems,
                        outputContext);

                    deleteStatement.Output.OutputTable = ((TableBuilder.TableContext)destination).SqlTable;
                }
            }

            if (deleteType == DeleteContext.DeleteType.DeleteOutput)
            {
                return(new DeleteWithOutputContext(buildInfo.Parent, sequence, outputContext !, outputExpression !));
            }

            return(new DeleteContext(buildInfo.Parent, sequence));
        }
Ejemplo n.º 27
0
 public static bool CreateTable(SqlTable table)
 {
     return(sqlcreator.EnsureTableStructure(table));
 }
Ejemplo n.º 28
0
            static Query <int> CreateQuery(IDataContext dataContext, string tableName, string databaseName, string schemaName, Type type)
            {
                var sqlTable = new SqlTable <T>(dataContext.MappingSchema);

                if (tableName != null)
                {
                    sqlTable.PhysicalName = tableName;
                }
                if (databaseName != null)
                {
                    sqlTable.Database = databaseName;
                }
                if (schemaName != null)
                {
                    sqlTable.Schema = schemaName;
                }

                var sqlQuery        = new SelectQuery();
                var updateStatement = new SqlUpdateStatement(sqlQuery);

                sqlQuery.From.Table(sqlTable);

                var ei = new Query <int>(dataContext, null)
                {
                    Queries = { new QueryInfo {
                                    Statement = updateStatement,
                                } }
                };

                var keys   = sqlTable.GetKeys(true).Cast <SqlField>().ToList();
                var fields = sqlTable.Fields.Values.Where(f => f.IsUpdatable).Except(keys).ToList();

                if (fields.Count == 0)
                {
                    if (Configuration.Linq.IgnoreEmptyUpdate)
                    {
                        return(null);
                    }

                    throw new LinqException(
                              keys.Count == sqlTable.Fields.Count ?
                              $"There are no fields to update in the type '{sqlTable.Name}'. No PK is defined or all fields are keys." :
                              $"There are no fields to update in the type '{sqlTable.Name}'.");
                }

                foreach (var field in fields)
                {
                    var param = GetParameter(type, dataContext, field);

                    ei.Queries[0].Parameters.Add(param);

                    updateStatement.Update.Items.Add(new SqlSetExpression(field, param.SqlParameter));
                }

                foreach (var field in keys)
                {
                    var param = GetParameter(type, dataContext, field);

                    ei.Queries[0].Parameters.Add(param);

                    sqlQuery.Where.Field(field).Equal.Expr(param.SqlParameter);

                    if (field.CanBeNull)
                    {
                        sqlQuery.IsParameterDependent = true;
                    }
                }

                SetNonQueryQuery(ei);

                return(ei);
            }
Ejemplo n.º 29
0
 public DeleteFromBlock(SqlTable sqlTable) : this(new TableEntity(sqlTable ?? throw new ArgumentException(nameof(sqlTable))))
Ejemplo n.º 30
0
            public override void SetTable(ISqlBuilder sqlBuilder, MappingSchema mappingSchema, SqlTable table, MemberInfo member, IEnumerable <Expression> expArgs, IEnumerable <ISqlExpression> sqlArgs)
            {
                var arg = sqlArgs.ElementAt(1);
                var ed  = mappingSchema.GetEntityDescriptor(table.ObjectType !);

                if (arg is SqlParameter p)
                {
                    var exp = expArgs.ElementAt(1).Unwrap();

                    // TODO: ValueConverter contract nullability violations
                    if (exp is ConstantExpression constExpr)
                    {
                        if (constExpr.Value is Func <string> )
                        {
                            p.ValueConverter = l => ((Func <string>)l !)();
                        }
                        else
                        {
                            p.ValueConverter = GetXmlConverter(mappingSchema, table) !;
                        }
                    }
                    else if (exp is LambdaExpression)
                    {
                        p.ValueConverter = l => ((Func <string>)l !)();
                    }
                }

                var columns = ed.Columns
                              .Select((c, i) => string.Format("{0} {1} path 'c{2}'",
                                                              sqlBuilder.ConvertInline(c.ColumnName, ConvertType.NameToQueryField),
                                                              string.IsNullOrEmpty(c.DbType) ?
                                                              GetDataTypeText(
                                                                  new SqlDataType(
                                                                      c.DataType == DataType.Undefined ? SqlDataType.GetDataType(c.MemberType).Type.DataType : c.DataType,
                                                                      c.MemberType,
                                                                      c.Length,
                                                                      c.Precision,
                                                                      c.Scale,
                                                                      c.DbType)) :
                                                              c.DbType,
                                                              i))
                              .Aggregate((s1, s2) => s1 + ", " + s2);

                table.SqlTableType   = SqlTableType.Expression;
                table.Name           = $"XmlTable(\'/t/r\' PASSING XmlType({{2}}) COLUMNS {columns}) {{1}}";
                table.TableArguments = new[] { arg };
            }
Ejemplo n.º 31
0
 public override string?GetTableSchemaName(SqlTable table)
 {
     return(table.Schema == null && table.TableOptions.IsTemporaryOptionSet() ? "SESSION" : base.GetTableSchemaName(table));
 }
Ejemplo n.º 32
0
 protected SqlSelectBuilderBase RightJoin(SqlTable sqlTable, Operator on = null)
 {
     return(Join(JoinType.Right, sqlTable, on));
 }
Ejemplo n.º 33
0
 protected SqlSelectBuilderBase FullOuterJoin(SqlTable sqlTable, Operator on = null)
 {
     return(Join(JoinType.FullOuter, sqlTable, on));
 }
 public ForeignKeyRegistrationToTableWithUniqueKeySingleColumn(SqlTable table, SchemaAndTableName referredTableName, string singleFkColumnName, bool isNullable, string fkName)
     : base(table, referredTableName, isNullable, fkName)
 {
     SingleFkColumnName = singleFkColumnName;
 }
Ejemplo n.º 35
0
        internal static void ParseSet(
            ExpressionBuilder builder,
            BuildInfo buildInfo,
            LambdaExpression extract,
            Expression update,
            IBuildContext select,
            SqlTable table,
            List <SqlQuery.SetExpression> items)
        {
            var ext = extract.Body;

            if (!ExpressionHelper.IsConstant(update.Type) && !builder.AsParameters.Contains(update))
            {
                builder.AsParameters.Add(update);
            }

            while (ext.NodeType == ExpressionType.Convert || ext.NodeType == ExpressionType.ConvertChecked)
            {
                ext = ((UnaryExpression)ext).Operand;
            }

            if (ext.NodeType != ExpressionType.MemberAccess || ext.GetRootObject() != extract.Parameters[0])
            {
                throw new LinqException("Member expression expected for the 'Set' statement.");
            }

            var body   = (MemberExpression)ext;
            var member = body.Member;

            if (member is MethodInfo)
            {
                member = TypeHelper.GetPropertyByMethod((MethodInfo)member);
            }

            var members = body.GetMembers();
            var name    = members
                          .Skip(1)
                          .Select(ex =>
            {
                var me = ex as MemberExpression;

                if (me == null)
                {
                    return(null);
                }

                var m = me.Member;

                if (m is MethodInfo)
                {
                    m = TypeHelper.GetPropertyByMethod((MethodInfo)m);
                }

                return(m);
            })
                          .Where(m => m != null && !TypeHelper.IsNullableValueMember(m))
                          .Select(m => m.Name)
                          .Aggregate((s1, s2) => s1 + "." + s2);

            if (table != null && !table.Fields.ContainsKey(name))
            {
                throw new LinqException("Member '{0}.{1}' is not a table column.", member.DeclaringType.Name, name);
            }

            ISqlExpression column;

            if (table != null)
            {
                column = table.Fields[name];
            }
            else
            {
                var sql = select.ConvertToSql(
                    body, 1, ConvertFlags.Field);
                //Expression.MakeMemberAccess(Expression.Parameter(member.DeclaringType, "p"), member), 1, ConvertFlags.Field)[0].Sql;

                if (sql.Length == 0)
                {
                    throw new LinqException("Member '{0}.{1}' is not a table column.", member.DeclaringType.Name, member.Name);
                }

                column = sql[0].Sql;
            }

            var expr = builder.ConvertToSql(select, update, false, false);

            SetConverter(builder, member, expr);

            items.Add(new SqlQuery.SetExpression(column, expr));
        }
Ejemplo n.º 36
0
 internal override SqlTable VisitTable(SqlTable tab) {
     foreach(SqlColumn col in tab.Columns) {
         this.VisitColumn(col);
     }
     return tab;
 }
Ejemplo n.º 37
0
 public string CreateTableQuery(SqlTable table)
 {
     var columns = table.Columns.Select(c => "'{0}' {1} {2} {3} {4}".SFormat(c.Name, DbTypeToString(c.Type, c.Length), c.Primary ? "PRIMARY KEY" : "", c.AutoIncrement ? "AUTOINCREMENT" : "", c.NotNull ? "NOT NULL" : "", c.Unique ? "UNIQUE" : ""));
     return "CREATE TABLE '{0}' ({1})".SFormat(table.Name, string.Join(", ", columns.ToArray()));
 }
Ejemplo n.º 38
0
 public static bool SchemaAndTableNameEquals(Row row, SqlTable table, string schemaNameColumn = "schema_name", string tableNameColumn = "table_name")
 {
     return(row.GetAs <string>(tableNameColumn) == table.SchemaAndTableName.TableName &&
            (string.IsNullOrEmpty(table.SchemaAndTableName.Schema) || row.GetAs <string>(schemaNameColumn) == table.SchemaAndTableName.Schema));
 }
Ejemplo n.º 39
0
 public static async Task <bool> CreateTableAsync(SqlTable table)
 {
     return(await Task.Run(() => sqlcreator.EnsureTableStructure(table)));
 }
Ejemplo n.º 40
0
        private DbmlContent GetContent(string dbmlPath)
        {
            var xml = new XmlDocument();

            xml.Load(dbmlPath);
            List <SqlTable>    tables    = new List <SqlTable>();
            List <SqlFunction> functions = new List <SqlFunction>();
            XmlNode            database  = xml.GetElementsByTagName(DbmlXmlTags.Database).Item(0);

            foreach (XmlNode node in database.ChildNodes)
            {
                if (node.Name == DbmlXmlTags.Table)
                {
                    var name     = node.Attributes[DbmlXmlAttributes.Name].Value;
                    var fullName = name.Split('.');
                    var table    = new SqlTable
                    {
                        TableName  = fullName[1],
                        SchemaName = fullName[0],
                        Columns    = new List <SqlColumn>()
                    };

                    var type = node.FirstChild.Attributes[DbmlXmlAttributes.Name].Value;
                    table.ClassName = type;
                    foreach (XmlNode tableNode in node.FirstChild.ChildNodes)
                    {
                        if (tableNode.Name == DbmlXmlTags.Column)
                        {
                            SqlColumn column = GetColumnFromNode(tableNode);
                            column.Table = table;
                            table.Columns.Add(column);
                        }
                    }
                    tables.Add(table);
                }
                else if (node.Name == DbmlXmlTags.Function)
                {
                    var name     = node.Attributes[DbmlXmlAttributes.Name].Value;
                    var fullName = name.Split('.');
                    var function = new SqlFunction
                    {
                        TableName  = fullName[1],
                        SchemaName = fullName[0],
                        Parameters = new List <SqlParameter>()
                    };
                    foreach (XmlNode functionNode in node.ChildNodes)
                    {
                        if (functionNode.Name == DbmlXmlTags.Parameter)
                        {
                            var column = new SqlParameter
                            {
                                Name   = functionNode.Attributes[DbmlXmlAttributes.Name].Value,
                                DbType = FixColumnType(functionNode.Attributes[DbmlXmlAttributes.DbType].Value),
                            };
                            function.Parameters.Add(column);
                        }

                        if (functionNode.Name == DbmlXmlTags.ElementType)
                        {
                            var attr = functionNode.Attributes[DbmlXmlAttributes.Name];
                            if (attr != null)
                            {
                                var result = new SqlResultType
                                {
                                    Name    = attr.Value,
                                    Columns = new List <SqlColumn>()
                                };

                                foreach (XmlNode columnNode in functionNode.ChildNodes)
                                {
                                    var column = GetColumnFromNode(columnNode);
                                    result.Columns.Add(column);
                                }

                                function.ResultType = result;
                            }
                        }
                    }
                    functions.Add(function);
                }
            }
            return(new DbmlContent
            {
                Tables = tables,
                Functions = functions
            });
        }
Ejemplo n.º 41
0
            static Query <int> CreateQuery(IDataContext dataContext, string tableName, string databaseName, string schemaName, Type type)
            {
                var fieldDic = new Dictionary <SqlField, ParameterAccessor>();
                var sqlTable = new SqlTable(dataContext.MappingSchema, type);

                if (tableName != null)
                {
                    sqlTable.PhysicalName = tableName;
                }
                if (databaseName != null)
                {
                    sqlTable.Database = databaseName;
                }
                if (schemaName != null)
                {
                    sqlTable.Schema = schemaName;
                }

                var sqlQuery = new SelectQuery();

                ParameterAccessor param;

                var insertOrUpdateStatement = new SqlInsertOrUpdateStatement(sqlQuery);

                insertOrUpdateStatement.Insert.Into  = sqlTable;
                insertOrUpdateStatement.Update.Table = sqlTable;

                sqlQuery.From.Table(sqlTable);

                var ei = new Query <int>(dataContext, null)
                {
                    Queries = { new QueryInfo {
                                    Statement = insertOrUpdateStatement,
                                } }
                };

                var supported = ei.SqlProviderFlags.IsInsertOrUpdateSupported && ei.SqlProviderFlags.CanCombineParameters;

                // Insert.
                //
                foreach (var field in sqlTable.Fields.Select(f => f.Value))
                {
                    if (field.IsInsertable)
                    {
                        if (!supported || !fieldDic.TryGetValue(field, out param))
                        {
                            param = GetParameter(type, dataContext, field);
                            ei.Queries[0].Parameters.Add(param);

                            if (supported)
                            {
                                fieldDic.Add(field, param);
                            }
                        }

                        insertOrUpdateStatement.Insert.Items.Add(new SqlSetExpression(field, param.SqlParameter));
                    }
                    else if (field.IsIdentity)
                    {
                        throw new LinqException("InsertOrReplace method does not support identity field '{0}.{1}'.", sqlTable.Name, field.Name);
                    }
                }

                // Update.
                //
                var keys   = sqlTable.GetKeys(true).Cast <SqlField>().ToList();
                var fields = sqlTable.Fields.Values.Where(f => f.IsUpdatable).Except(keys).ToList();

                if (keys.Count == 0)
                {
                    throw new LinqException("InsertOrReplace method requires the '{0}' table to have a primary key.", sqlTable.Name);
                }

                var q =
                    (
                        from k in keys
                        join i in insertOrUpdateStatement.Insert.Items on k equals i.Column
                        select new { k, i }
                    ).ToList();

                var missedKey = keys.Except(q.Select(i => i.k)).FirstOrDefault();

                if (missedKey != null)
                {
                    throw new LinqException("InsertOrReplace method requires the '{0}.{1}' field to be included in the insert setter.",
                                            sqlTable.Name,
                                            missedKey.Name);
                }

                if (fields.Count == 0)
                {
                    throw new LinqException("There are no fields to update in the type '{0}'.", sqlTable.Name);
                }

                foreach (var field in fields)
                {
                    if (!supported || !fieldDic.TryGetValue(field, out param))
                    {
                        param = GetParameter(type, dataContext, field);
                        ei.Queries[0].Parameters.Add(param);

                        if (supported)
                        {
                            fieldDic.Add(field, param = GetParameter(typeof(T), dataContext, field));
                        }
                    }

                    insertOrUpdateStatement.Update.Items.Add(new SqlSetExpression(field, param.SqlParameter));
                }

                insertOrUpdateStatement.Update.Keys.AddRange(q.Select(i => i.i));

                // Set the query.
                //
                if (ei.SqlProviderFlags.IsInsertOrUpdateSupported)
                {
                    SetNonQueryQuery(ei);
                }
                else
                {
                    MakeAlternativeInsertOrUpdate(ei);
                }

                return(ei);
            }
Ejemplo n.º 42
0
 static bool IsTemporary(SqlTable table)
 {
     return(table.TableOptions.IsTemporaryOptionSet() || table.PhysicalName !.StartsWith("#"));
 }
Ejemplo n.º 43
0
        internal static void ParseSet(
            ExpressionBuilder builder,
            BuildInfo buildInfo,
            LambdaExpression extract,
            LambdaExpression update,
            IBuildContext select,
            SqlTable table,
            List <SelectQuery.SetExpression> items)
        {
            var ext = extract.Body;

            while (ext.NodeType == ExpressionType.Convert || ext.NodeType == ExpressionType.ConvertChecked)
            {
                ext = ((UnaryExpression)ext).Operand;
            }

            if (ext.NodeType != ExpressionType.MemberAccess || ext.GetRootObject() != extract.Parameters[0])
            {
                throw new LinqException("Member expression expected for the 'Set' statement.");
            }

            var body   = (MemberExpression)ext;
            var member = body.Member;

            if (member is MethodInfo)
            {
                member = ((MethodInfo)member).GetPropertyInfo();
            }

            var members = body.GetMembers();
            var name    = members
                          .Skip(1)
                          .Select(ex =>
            {
                var me = ex as MemberExpression;

                if (me == null)
                {
                    return(null);
                }

                var m = me.Member;

                if (m is MethodInfo)
                {
                    m = ((MethodInfo)m).GetPropertyInfo();
                }

                return(m);
            })
                          .Where(m => m != null && !m.IsNullableValueMember())
                          .Select(m => m.Name)
                          .Aggregate((s1, s2) => s1 + "." + s2);

            if (table != null && !table.Fields.ContainsKey(name))
            {
                throw new LinqException("Member '{0}.{1}' is not a table column.", member.DeclaringType.Name, name);
            }

            var column = table != null ?
                         table.Fields[name] :
                         select.ConvertToSql(
                body, 1, ConvertFlags.Field)[0].Sql;
            //Expression.MakeMemberAccess(Expression.Parameter(member.DeclaringType, "p"), member), 1, ConvertFlags.Field)[0].Sql;
            var sp   = select.Parent;
            var ctx  = new ExpressionContext(buildInfo.Parent, select, update);
            var expr = builder.ConvertToSqlExpression(ctx, update.Body);

            builder.ReplaceParent(ctx, sp);

            items.Add(new SelectQuery.SetExpression(column, expr));
        }
        public OutputObject GenerateWebServiceControllerClass(SqlTable sqlTable, List <string> namespaceIncludes, IDictionary <string, bool> options)
        {
            if (sqlTable == null)
            {
                throw new ArgumentException("Sql table cannot be null");
            }

            string controllerName = NameFormatter.ToCSharpClassName(sqlTable.Name);

            var output = new OutputObject
            {
                Name = $"{controllerName}Controller.cs",
                Type = OutputObject.eObjectType.CSharp
            };

            var sb = new StringBuilder();

            sb.AppendLine();
            sb.AppendLine("using Microsoft.AspNetCore.Mvc;");
            sb.AppendLine("using System;");
            sb.AppendLine("using TelemetryManager;");
            sb.AppendLine();

            if (namespaceIncludes != null && namespaceIncludes.Count > 1)
            {
                sb.AppendLine(GenerateNamespaceIncludes(namespaceIncludes));
            }

            sb.AppendLine($"namespace {CONTROLLER_NAMESPACE}");
            sb.AppendLine("{");

            sb.AppendLine(AddTabs(1) + "[ApiController]");

            if (options[GENERATE_BASE_CONTROLLER])
            {
                sb.AppendLine(AddTabs(1) + $"public class {controllerName}Controller : ApiControllerBase");
            }
            else
            {
                sb.AppendLine(AddTabs(1) + $"public class {controllerName}Controller : ControllerBase");
            }

            sb.AppendLine(AddTabs(1) + "{");

            sb.AppendLine(AddTabs(2) + $"public {controllerName}Controller(IConfigProvider config, ILogger log, IMetrics metrics, IDataProvider datasource, ISecurityProvider security)");
            sb.AppendLine(AddTabs(3) + $": base(config, log, metrics, datasource, security) {{ }}");
            sb.AppendLine();

            // controllers
            sb.AppendLine(GenerateGetById(controllerName, options));
            sb.AppendLine();

            sb.AppendLine(GenerateGetAll(controllerName, options));
            sb.AppendLine();

            //sb.AppendLine(GenerateGetAllPaged(sqlTable.Name));
            //sb.AppendLine();

            //sb.AppendLine(GenerateInsert(sqlTable.Name));
            //sb.AppendLine();

            //sb.AppendLine(GenerateUpdate(sqlTable.Name));
            //sb.AppendLine();

            //sb.AppendLine(GenerateDelete(sqlTable.Name));
            //sb.AppendLine();

            sb.AppendLine("}");

            output.Body = sb.ToString();
            return(output);
        }
 public SqlInsertBuilderHelper(SqlTable sqlTable) : base(sqlTable)
 {
 }
Ejemplo n.º 46
0
 public PrimaryKey(SqlTable sqlTable, string name)
     : base(sqlTable, name)
 {
 }
Ejemplo n.º 47
0
 StringBuilder AppendOutputTableVariable(SqlTable table)
 {
     StringBuilder.Append('@').Append(table.PhysicalName).Append("Output");
     return(StringBuilder);
 }
 public SqlDeleteBuilderHelper(SqlTable sqlTable) : base(sqlTable)
 {
 }
Ejemplo n.º 49
0
 public override string?GetTableSchemaName(SqlTable table)
 {
     return(table.Schema == null || table.TableOptions.HasIsTemporary() ? null : ConvertInline(table.Schema, ConvertType.NameToSchema));
 }
 public ComputedExpressionSqlVisitor(SqlTable from, SqlTable to)
 {
     this.from = from;
     this.to   = to;
 }
Ejemplo n.º 51
0
 /// <summary>
 /// Visits the specified <see cref="SqlTable"/>.
 /// </summary>
 /// <param name="expression">
 /// The expression to visit.
 /// </param>
 public virtual void Visit(SqlTable expression)
 {
 }
Ejemplo n.º 52
0
 protected virtual SqlExpression VisitTable(SqlTable expr)
 {
     return(expr);
 }
Ejemplo n.º 53
0
 public List<SqlColumn> GetColumns(SqlTable table)
 {
     var ret = new List<SqlColumn>();
     using (var reader = database.QueryReader("PRAGMA table_info({0})".SFormat(table.Name)))
     {
         while (reader.Read())
             ret.Add(new SqlColumn(reader.Get<string>("name"), StringToDbType(reader.Get<string>("type"))) { NotNull = (reader.Get<int>("notnull") != 0), Primary = (reader.Get<int>("pk") != 0) });
     }
     return ret;
 }
Ejemplo n.º 54
0
            static Query <int> CreateQuery(
                IDataContext dataContext,
                EntityDescriptor descriptor,
                T obj,
                InsertOrUpdateColumnFilter <T>?columnFilter,
                string?tableName,
                string?serverName,
                string?databaseName,
                string?schemaName,
                TableOptions tableOptions,
                Type type)
            {
                var fieldDic = new Dictionary <SqlField, ParameterAccessor>();
                var sqlTable = new SqlTable(dataContext.MappingSchema, type);

                if (tableName != null)
                {
                    sqlTable.PhysicalName = tableName;
                }
                if (serverName != null)
                {
                    sqlTable.Server = serverName;
                }
                if (databaseName != null)
                {
                    sqlTable.Database = databaseName;
                }
                if (schemaName != null)
                {
                    sqlTable.Schema = schemaName;
                }
                if (tableOptions.IsSet())
                {
                    sqlTable.TableOptions = tableOptions;
                }

                var sqlQuery = new SelectQuery();

                ParameterAccessor?param = null;

                var insertOrUpdateStatement = new SqlInsertOrUpdateStatement(sqlQuery);

                insertOrUpdateStatement.Insert.Into  = sqlTable;
                insertOrUpdateStatement.Update.Table = sqlTable;

                sqlQuery.From.Table(sqlTable);

                var ei = new Query <int>(dataContext, null)
                {
                    Queries = { new QueryInfo {
                                    Statement = insertOrUpdateStatement,
                                } }
                };

                var supported = ei.SqlProviderFlags.IsInsertOrUpdateSupported && ei.SqlProviderFlags.CanCombineParameters;

                // Insert.
                //
                foreach (var field in sqlTable.Fields)
                {
                    if (field.IsInsertable && !field.ColumnDescriptor.ShouldSkip(obj !, descriptor, SkipModification.Insert))
                    {
                        if (columnFilter == null || columnFilter(obj, field.ColumnDescriptor, true))
                        {
                            if (!supported || !fieldDic.TryGetValue(field, out param))
                            {
                                param = GetParameter(type, dataContext, field);
                                ei.Queries[0].AddParameterAccessor(param);

                                if (supported)
                                {
                                    fieldDic.Add(field, param);
                                }
                            }

                            insertOrUpdateStatement.Insert.Items.Add(new SqlSetExpression(field, param.SqlParameter));
                        }
                    }
Ejemplo n.º 55
0
        public static string GetXmlData <T>(MappingSchema mappingSchema, IEnumerable <T> data)
        {
            var sqlTable = new SqlTable(mappingSchema, typeof(T));

            return(GetXmlData(mappingSchema, sqlTable, data));
        }
Ejemplo n.º 56
0
 public override void SetTable(SqlTable table, MemberInfo member, IEnumerable <Expression> arguments, IEnumerable <ISqlExpression> sqlArgs)
 {
     table.SqlTableType   = SqlTableType.Expression;
     table.Name           = Expression ?? member.Name;
     table.TableArguments = ConvertArgs(member, sqlArgs.ToArray());
 }
Ejemplo n.º 57
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="table"></param>
        /// <param name="columns"></param>
        /// <returns>True if the columns match, otherwise false</returns>
        bool CompareColumns(SqlTable table, List<SqlColumn> columns)
        {
            if (table.Columns.Count != columns.Count)
                return false;

            foreach (var col in table.Columns)
            {
                var tcol = columns.FirstOrDefault(s => s.Name == col.Name);
                if (tcol == null)
                    return false;

                if (tcol.Type != col.Type || 
                    tcol.Primary != col.Primary || 
                    tcol.NotNull != col.NotNull)
                    return false;
            }
            return true;
        }
Ejemplo n.º 58
0
        static string GetXmlData <T>(MappingSchema mappingSchema, SqlTable sqlTable, IEnumerable <T> data)
        {
            var converter = OracleXmlTableAttribute.GetXmlConverter(mappingSchema, sqlTable);

            return(converter(data));
        }
Ejemplo n.º 59
0
 internal override SqlTable VisitTable(SqlTable tab) {
     string name = tab.Name;
     this.WriteName(name);
     return tab;
 }
Ejemplo n.º 60
0
            internal static Func <object, string> GetXmlConverter(MappingSchema mappingSchema, SqlTable sqlTable)
            {
                var ed = mappingSchema.GetEntityDescriptor(sqlTable.ObjectType !);

                return(o => ValueConverter(
                           ed.Columns.Select <ColumnDescriptor, Action <StringBuilder, object> >(c =>
                {
                    var conv = mappingSchema.ValueToSqlConverter;
                    return (sb, obj) =>
                    {
                        var value = c.GetValue(obj);

                        if (value is string && c.MemberType == typeof(string))
                        {
                            var str = conv.Convert(new StringBuilder(), value).ToString();

                            if (str.Length > 2)
                            {
                                str = str.Substring(1);
                                str = str.Substring(0, str.Length - 1);
                                sb.Append(str);
                            }
                        }
                        else
                        {
                            conv.Convert(sb, value);
                        }
                    };
                }).ToList(),
                           o));
            }