// ===============================================================================
        //                                                                      Initialize
        //                                                                      ==========
        public void InitializeConditionBeanMetaData()
        {
            Map <String, DBMeta> dbmetaMap = DBMetaInstanceHandler.GetUnmodifiableDBMetaMap();
            Collection <DBMeta>  dbmetas   = dbmetaMap.values();
            DateTime?            before    = null;

            if (_log.IsInfoEnabled)
            {
                before = DateTime.Now;
                _log.Info("/= = = = = = = = = = = = = = = = = InitializeConditionBeanMetaData()");
            }
            foreach (DBMeta dbmeta in dbmetas)
            {
                DaoReadable dao    = DaoSelector.ByName(dbmeta.TableDbName);
                MethodInfo  method = dao.GetType().GetMethod("InitializeDaoMetaData");
                if (method == null)
                {
                    continue;
                }
                method.Invoke(dao, new Object[] { "SelectList" });
            }
            if (_log.IsInfoEnabled)
            {
                DateTime after = DateTime.Now;
                _log.Info("Initialized Count: " + dbmetas.size());
                _log.Info("= = = = = = = = = =/ [" + TraceViewUtil.ConvertToPerformanceView(before.Value, after) + "]");
            }
        }
        protected void assertAliasName(String aliasName)
        {
            if (aliasName == null || aliasName.Trim().Length == 0)
            {
                throwDerivedReferrerInvalidAliasNameException();
            }
            DBMeta dbmeta = DBMetaInstanceHandler.FindDBMeta(_baseCB.TableDbName);

            PropertyInfo[] properties         = dbmeta.EntityType.GetProperties();
            String         targetPropertyName = aliasName.Replace("_", "").ToLower();
            bool           existsSetterMethod = false;

            foreach (PropertyInfo property in properties)
            {
                if (!property.CanWrite)
                {
                    continue;
                }
                if (targetPropertyName.Equals(property.Name.ToLower()))
                {
                    existsSetterMethod = true;
                    break;
                }
            }
            if (!existsSetterMethod)
            {
                throwDerivedReferrerEntityPropertyNotFoundException(aliasName, dbmeta.EntityType);
            }
        }
Example #3
0
        public virtual DaoReadable ByName(String tableFlexibleName)
        {
            AssertStringNotNullAndNotTrimmedEmpty("tableFlexibleName", tableFlexibleName);
            DBMeta dbmeta = DBMetaInstanceHandler.FindDBMeta(tableFlexibleName);

            return(InternalSelect <DaoReadable>(GetDaoType(dbmeta)));
        }
        public static DBMeta FindDBMeta(Type rowType, String tableName)
        {
            DBMeta dbmeta = FindCachedDBMeta(rowType);

            if (dbmeta != null)
            {
                return(dbmeta);
            }
            try {
                dbmeta = DBMetaInstanceHandler.FindDBMeta(tableName);
            } catch (DBMetaNotFoundException) {
                return(null);
            }
            CacheDBMeta(rowType, dbmeta);
            return(dbmeta);
        }
        // ===================================================================================
        //                                                                       Lock Override
        //                                                                       =============
        public override SqlClause lockForUpdate()
        {
            DBMeta dbmeta = DBMetaInstanceHandler.FindDBMeta(_tableName);

            if (dbmeta.HasPrimaryKey)
            {
                String primaryKeyColumnName = dbmeta.PrimaryUniqueInfo.FirstColumn.ColumnDbName;
                _lockSqlSuffix = " for update of " + _tableName + "." + primaryKeyColumnName;
            }
            else
            {
                String randomColumnName = dbmeta.ColumnInfoList.get(0).ColumnDbName;
                _lockSqlSuffix = " for update of " + _tableName + "." + randomColumnName;
            }

            _lockSqlSuffix = " for update";
            return(this);
        }
Example #6
0
        protected String BuildBehaviorSqlPackageName()
        {
            DBMeta dbmeta            = DBMetaInstanceHandler.FindDBMeta(_tableDbName);
            String behaviorTypeName  = dbmeta.BehaviorTypeName;
            String outsideSqlPackage = DBFluteConfig.GetInstance().OutsideSqlPackage;

            if (outsideSqlPackage != null && outsideSqlPackage.Trim().Length > 0)
            {
                String behaviorClassName = behaviorTypeName.Substring(behaviorTypeName.LastIndexOf(".") + ".".Length);
                String tmp       = behaviorTypeName.Substring(0, behaviorTypeName.LastIndexOf("."));
                String exbhvName = tmp.Contains(".") ? tmp.Substring(tmp.LastIndexOf(".") + ".".Length) : tmp;
                return(FilterBehaviorSqlPackageName(outsideSqlPackage + "." + exbhvName + "." + behaviorClassName));
            }
            else
            {
                return(FilterBehaviorSqlPackageName(behaviorTypeName));
            }
        }
        /**
         * @param cb Condition-bean. (NotNull)
         * @param entity Entity. (NotNull)
         * @return The two-way SQL of query update. (NullAllowed: If the set of modified properties is empty, return null.)
         */
        protected String buildQueryUpdateTwoWaySql(ConditionBean cb, Entity entity)
        {
            Map <String, String> columnParameterMap = new LinkedHashMap <String, String>();
            DBMeta dbmeta = DBMetaInstanceHandler.FindDBMeta(entity.TableDbName);

            System.Collections.Generic.IDictionary <String, Object> modifiedPropertyNames = entity.ModifiedPropertyNames;
            if (modifiedPropertyNames.Count == 0)
            {
                return(null);
            }
            String currentPropertyName = null;

            foreach (String propertyName in modifiedPropertyNames.Keys)
            {
                currentPropertyName = propertyName;
                ColumnInfo   columnInfo = dbmeta.FindColumnInfo(propertyName);
                String       columnName = columnInfo.ColumnDbName;
                PropertyInfo getter     = columnInfo.FindProperty();
                Object       value      = getter.GetValue(entity, null);
                if (value != null)
                {
                    columnParameterMap.put(columnName, "/*entity." + propertyName + "*/null");
                }
                else
                {
                    columnParameterMap.put(columnName, "null");
                }
            }
            if (dbmeta.HasVersionNo)
            {
                ColumnInfo columnInfo = dbmeta.VersionNoColumnInfo;
                String     columnName = columnInfo.ColumnDbName;
                columnParameterMap.put(columnName, columnName + " + 1");
            }
            if (dbmeta.HasUpdateDate)
            {
                ColumnInfo   columnInfo = dbmeta.UpdateDateColumnInfo;
                PropertyInfo setter     = columnInfo.FindProperty();
                setter.SetValue(entity, DateTime.Now, null);
                String columnName = columnInfo.ColumnDbName;
                columnParameterMap.put(columnName, "/*entity." + columnInfo.PropertyName + "*/null");
            }
            return(cb.SqlClause.getClauseQueryUpdate(columnParameterMap));
        }
        // ===============================================================================
        //                                                                     Constructor
        //                                                                     ===========
        public AbstractConditionBean()
        {
            DBMeta dbmeta = DBMetaInstanceHandler.FindDBMeta(TableDbName);

            _sqlClause = new SqlClausePostgreSql(dbmeta.TableSqlName);
        }
        protected String buildInvocationExpressionWithoutKakko(IMethodInvocation invocation, String invokeClassName, String invokeMethodName)
        {
            if (invokeClassName.Contains("OutsideSql") && invokeClassName.Contains("Executor"))   // OutsideSql Executor Handling and CSharp Only Contains
            {
                try {
                    String originalName = invokeClassName;
                    if (IsSpecifiedOutsideSql())
                    {
                        OutsideSqlContext outsideSqlContext = GetOutsideSqlContext();
                        String            tableDbName       = outsideSqlContext.TableDbName;
                        DBMeta            dbmeta            = DBMetaInstanceHandler.FindDBMeta(tableDbName);
                        String            behaviorTypeName  = dbmeta.BehaviorTypeName;
                        String            behaviorClassName = behaviorTypeName.Substring(behaviorTypeName.LastIndexOf(".") + ".".Length);
                        invokeClassName = behaviorClassName + ".OutsideSql()";
                        if (originalName.Contains("OutsideSqlEntityExecutor"))   // CSharp Only Contains
                        {
                            invokeClassName = invokeClassName + ".EntityHandling()";
                        }
                        else if (originalName.Contains("OutsideSqlPagingExecutor"))     // CSharp Only Contains
                        {
                            if (outsideSqlContext.IsAutoPagingLogging)
                            {
                                invokeClassName = invokeClassName + ".AutoPaging()";
                            }
                            else
                            {
                                invokeClassName = invokeClassName + ".ManualPaging()";
                            }
                        }
                        else if (originalName.Contains("OutsideSqlCursorExecutor"))     // CSharp Only Contains
                        {
                            invokeClassName = invokeClassName + ".CursorHandling()";
                        }
                    }
                    else
                    {
                        invokeClassName = "OutsideSql";
                    }
                } catch (Exception ignored) {
                    Log("Ignored exception occurred: msg=" + ignored.Message);
                }
            }
            String invocationExpressionWithoutKakko = invokeClassName + "." + invokeMethodName;

            if ("SelectPage".Equals(invokeMethodName))   // Special Handling!
            {
                bool resultTypeInteger = false;
                if (IsSpecifiedOutsideSql())
                {
                    OutsideSqlContext outsideSqlContext = GetOutsideSqlContext();
                    Type resultType = outsideSqlContext.ResultType;
                    if (resultType != null)
                    {
                        if (typeof(int).IsAssignableFrom(resultType))
                        {
                            resultTypeInteger = true;
                        }
                    }
                }
                if (resultTypeInteger || "SelectCount".Equals(invocation.Method.Name))
                {
                    invocationExpressionWithoutKakko = invocationExpressionWithoutKakko + "():count";
                }
                else
                {
                    invocationExpressionWithoutKakko = invocationExpressionWithoutKakko + "():paging";
                }
            }
            return(invocationExpressionWithoutKakko);
        }