Пример #1
0
        public void ExecuteReader_Read_dynamically_and_unmapped_entity()
        {
            string tableName             = "tst_SCR_01";
            string createTableFormat     = "create table {0}(Id integer primary key autoincrement not null, Prop1 nvarchar(50) not null, Prop2 datetime);";
            string insertStatementFormat = "Insert into {0}(Prop1, Prop2) Values($prop1, $prop2);";

            var transaction = session.BeginTransaction();
            var dbConn      = session.ConnectionManager.OpenConnection();

            session.DataAccess.ExecuteNonQuery(dbConn, transaction, string.Format(createTableFormat, tableName));

            for (int i = 1; i < 6; i++)
            {
                session.DataAccess.ExecuteNonQuery(dbConn, transaction, string.Format(insertStatementFormat, tableName), new QueryParam("prop1", DbType.String)
                {
                    Value = string.Format("val{0}", i)
                }, new QueryParam("prop2", DbType.DateTime)
                {
                    Value = DateTime.Now.AddDays(i)
                });
            }

            session.CommitTransaction();
            string           query  = "select Id, Prop1, Prop2 from " + tableName + " where Prop1 = 'val2'";
            DynamicEntityMap dmap   = new DynamicEntityMap(null, tableName, typeof(SqlCommandRunnerTestsFake1));
            SqlCommandRunner runner = new SqlCommandRunner();

            SqlCommandRunnerTestsFake1 ent1 = runner.ExecuteReader <SqlCommandRunnerTestsFake1>(dmap, dbConn, session, query, null).FirstOrDefault();

            Assert.AreEqual("val2", ent1.Prop1);
        }
Пример #2
0
        public void Ctor_Load_Properties_as_column()
        {
            DynamicEntityMap dmap = new DynamicEntityMap("tb", "tableFake", typeof(DynamicEntityFake));

            Assert.AreEqual(4, dmap.Properties.Count);
            Assert.AreEqual("tb", dmap.TableAlias);
            Assert.AreEqual("tableFake", dmap.TableName);
            Assert.AreEqual("Name", dmap["Name"].ColumnName);
            Assert.AreEqual("Prop3", dmap["Prop3"].ColumnName);
        }
        public void Create_proxy_with_valid_entity_map_and_null_proxyhadrator_with_implement_ITrackable_true_should_return_trackable_entity()
        {
            Type fakeType = typeof(ProxyFakeClassTest);
            var  entMap   = new DynamicEntityMap("faket", "faketable", fakeType);
            var  obj      = fakeType.CreateProxy(entMap, true);

            Assert.IsNotNull(obj);
            Assert.IsNotAssignableFrom(fakeType, obj);
            var trackable = (ITrackable)obj;

            Assert.IsFalse(trackable.IsDirty);
            //Assert.IsNotNull(trackable);
        }
        public void Create_proxy_with_valid_entity_map_and_null_proxyhadrator_should_create_a_proxy_already_loaded()
        {
            Type fakeType = typeof(ProxyFakeClassTest);
            var  entMap   = new DynamicEntityMap("faket", "faketable", fakeType);
            var  obj      = fakeType.CreateProxy(entMap, false);

            Assert.IsNotNull(obj);
            Assert.IsNotAssignableFrom(fakeType, obj);
            var lazyObj = (ILazyObject)obj;

            Assert.IsTrue(lazyObj.IsProxyLoaded);
            Assert.AreEqual(fakeType, lazyObj.ProxyOf);
        }
Пример #5
0
        StatementMap PrepareStatement <T>(ISession session, string statementName, params QueryParam[] paramArray)
        {
            if (session == null)
            {
                throw new ArgumentNullException("session");
            }

            StatementMap statement;

            if (!session.SessionFactory.DbSettings.Map.MappedStatements.TryGetValue(statementName, out statement))
            {
                throw new MappingException("Statement " + statementName + " was not found. Verified if it is mapped properly.");
            }

            if (string.IsNullOrWhiteSpace(statement.Body))
            {
                throw new MappingException("Statement " + statementName + " body's was null or empty. Cannot run a mapped statement without SQL.");
            }


            //does the statement needs to be parsed?
            //does the statement has input parameter and db parameters?
            bool parse = statement.IsParsingRequired;

            if (!parse)
            {
                parse = ((statement.DbParametersMap.Count > 0) || (statement.InputParametersMap.Count > 0));
            }

            if (parse && !statement.IsReady)
            {
                //parse it
                if (statement.InputParametersMap.Count > 1)
                {
                    throw new GoliathDataException(string.Format("{0} requires {1} input paremeters. None were provided.", statement.Name, statement.InputParametersMap.Count));
                }

                EntityMap entityMap;
                var       type = typeof(T);
                if (!session.SessionFactory.DbSettings.Map.EntityConfigs.TryGetValue(type.FullName, out entityMap))
                {
                    entityMap = new DynamicEntityMap(type);
                }

                var compiledStatement = statementParser.Parse(session.SessionFactory.DbSettings.SqlDialect, entityMap, statement.Body.Trim(), null, paramArray);
                ProcessCompiledStatement(compiledStatement, statement);
            }

            return(statement);
        }
Пример #6
0
        /// <summary>
        /// Parses the specified text.
        /// </summary>
        /// <param name="dialect">The mapper.</param>
        /// <param name="config">The config.</param>
        /// <param name="inputParams">The input params.</param>
        /// <param name="text">The text.</param>
        /// <param name="dbParameters">The db parameters.</param>
        /// <returns></returns>
        public CompiledStatement Parse(SqlDialect dialect, MapConfig config, IDictionary <string, StatementInputParam> inputParams, string text, params QueryParam[] dbParameters)
        {
            if (inputParams == null)
            {
                inputParams = new Dictionary <string, StatementInputParam>()
                {
                };
            }

            foreach (var stat in inputParams.Values)
            {
                EntityMap entMap;
                if (!config.EntityConfigs.TryGetValue(stat.Type, out entMap))
                {
                    if (stat.ClrType == null)
                    {
                        stat.ClrType = Type.GetType(stat.Type);
                    }

                    entMap = new DynamicEntityMap(stat.ClrType);
                }
                else
                {
                    stat.IsMapped = true;
                    stat.Type     = entMap.FullName;
                    if (stat.Type == null)
                    {
                        stat.ClrType = Type.GetType(entMap.FullName);
                    }
                }

                stat.Map = entMap;
            }

            if (inputParams.Count == 1)
            {
                return(Parse(dialect, inputParams.Values.First().Map, text, inputParams.Values.First(), dbParameters));
            }



            text = ParseColumnTag(dialect, config, inputParams, text);
            var statement = ParseObjectPropertyTag(dialect, config, inputParams, text);

            ParseDbParameters(dialect, statement, dbParameters);
            statement.Body = ParseEntityMapAllowedProperties(config, inputParams, statement.Body);

            return(statement);
        }
Пример #7
0
        public DeleteSqlBuilder <T> Delete <T>(string tableName, T entity)
        {
            var entityMap = new DynamicEntityMap(tableName, tableName, typeof(T));

            return(DeleteInternal(entityMap, entity));
        }
Пример #8
0
        public int Insert <T>(string tableName, T entity)
        {
            var entityMap = new DynamicEntityMap(tableName, tableName, typeof(T));

            return(Insert(entityMap, entity));
        }
Пример #9
0
        /// <summary>
        /// Runs the statement.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="session">The session.</param>
        /// <param name="sql">The SQL.</param>
        /// <param name="paramArray">The param array.</param>
        /// <returns></returns>
        public IList <T> RunList <T>(ISession session, string sql, TableQueryMap queryMap, params QueryParam[] paramArray)
        {
            Type instanceType = typeof(T);
            //bool ownTransaction = false;
            var       dbConn = session.ConnectionManager.OpenConnection();
            IList <T> list   = new List <T>();

            try
            {
                //if ((session.CurrentTransaction == null) || !session.CurrentTransaction.IsStarted)
                //{
                //    ownTransaction = true;
                //    session.BeginTransaction();
                //}

                if (instanceType.IsPrimitive || typeof(string) == instanceType || typeof(Guid) == instanceType || typeof(DateTime) == instanceType || typeof(DateTimeOffset) == instanceType)
                {
                    list = ExecuteReaderPrimitive <T>(dbConn, session, sql, paramArray);
                }
                else
                {
                    MapConfig   map = session.SessionFactory.DbSettings.Map;
                    EntityMap   entMap;
                    ComplexType complexType;

                    if (map.EntityConfigs.TryGetValue(instanceType.FullName, out entMap))
                    {
                        if (queryMap == null)
                        {
                            int iteration = 0;
                            int recursion = 0;
                            queryMap        = new TableQueryMap(entMap.TableName, ref recursion, ref iteration);
                            queryMap.Prefix = entMap.TableAlias;
                        }

                        list = ExecuteReader <T>(entMap, dbConn, session, sql, queryMap, paramArray);
                    }
                    else if (map.ComplexTypes.TryGetValue(instanceType.FullName, out complexType))
                    {
                        list = ExecuteReader <T>(complexType, dbConn, session, sql, queryMap, paramArray);
                    }
                    else
                    {
                        //Build a dynamic entity
                        DynamicEntityMap dynEntMap = new DynamicEntityMap(instanceType);
                        list = ExecuteReader <T>(dynEntMap, dbConn, session, sql, null, paramArray);
                    }
                }

                //if (ownTransaction)
                //    session.CommitTransaction();

                return(list);
            }
            catch (GoliathDataException ex)
            {
                //if (ownTransaction)
                //    session.RollbackTransaction();

                logger.Log(LogLevel.Debug, string.Format("Goliath Exception found {0} ", ex.Message));

                throw;
            }
            catch (Exception ex)
            {
                //if (ownTransaction)
                //    session.RollbackTransaction();

                throw new GoliathDataException(string.Format("Exception while running sql command: {0}", sql), ex);
            }
        }
Пример #10
0
        /// <summary>
        /// Runs the statement.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="session">The session.</param>
        /// <param name="sql">The SQL.</param>
        /// <param name="limit">The limit.</param>
        /// <param name="offset">The offset.</param>
        /// <param name="paramArray">The param array.</param>
        /// <returns></returns>
        /// <exception cref="GoliathDataException"></exception>
        public IList <T> RunList <T>(ISession session, SqlQueryBody sql, int limit, int offset, params QueryParam[] paramArray)
        {
            Type instanceType = typeof(T);
            //bool ownTransaction = false;
            var       dbConn  = session.ConnectionManager.OpenConnection();
            IList <T> list    = new List <T>();
            var       dialect = session.SessionFactory.DbSettings.SqlDialect;

            //var serializer = session.SessionFactory.DataSerializer;
            try
            {
                //if ((session.CurrentTransaction == null) || !session.CurrentTransaction.IsStarted)
                //{
                //    ownTransaction = true;
                //    session.BeginTransaction();
                //}

                if (instanceType.IsPrimitive || typeof(string) == instanceType || typeof(Guid) == instanceType || typeof(DateTime) == instanceType || typeof(DateTimeOffset) == instanceType)
                {
                    list = ExecuteReaderPrimitive <T>(dbConn, session, sql.ToString(dialect, new PagingInfo()
                    {
                        Limit = limit, Offset = offset
                    }), paramArray);
                }
                else
                {
                    MapConfig   map = session.SessionFactory.DbSettings.Map;
                    EntityMap   entMap;
                    ComplexType complexType;

                    if (map.EntityConfigs.TryGetValue(instanceType.FullName, out entMap))
                    {
                        list = ExecuteReader <T>(entMap, dbConn, session, sql, limit, offset, paramArray);
                    }
                    else if (map.ComplexTypes.TryGetValue(instanceType.FullName, out complexType))
                    {
                        list = ExecuteReader <T>(complexType, dbConn, session, sql, limit, offset, paramArray);
                    }
                    else
                    {
                        //Build a dynamic entity
                        DynamicEntityMap dynEntMap = new DynamicEntityMap(instanceType);
                        list = ExecuteReader <T>(dynEntMap, dbConn, session, sql, limit, offset, paramArray);
                    }
                }

                //if (ownTransaction)
                //    session.CommitTransaction();

                return(list);
            }
            catch (GoliathDataException ex)
            {
                //if (ownTransaction)
                //    session.RollbackTransaction();

                logger.Log(LogLevel.Debug, string.Format("Goliath Exception found {0} ", ex.Message));
                throw;
            }
            catch (Exception ex)
            {
                //if (ownTransaction)
                //    session.RollbackTransaction();

                throw new GoliathDataException(string.Format("Exception while running sql command: {0}", sql), ex);
            }
        }