private string getCustomQuery(SqlBuilderTask.QueryTypeEnum queryType, IPocoSqlMapping map)
        {
            string customQuery    = null;
            var    customMappings = map.GetCustomMappings();

            if (customMappings != null)
            {
                switch (queryType)
                {
                case SqlBuilderTask.QueryTypeEnum.Select:
                    customQuery = customMappings.SelectQuery;
                    break;

                case SqlBuilderTask.QueryTypeEnum.Insert:
                    customQuery = customMappings.InsertQuery;
                    break;

                case SqlBuilderTask.QueryTypeEnum.Update:
                    customQuery = customMappings.UpdateQuery;
                    break;

                case SqlBuilderTask.QueryTypeEnum.Delete:
                    customQuery = customMappings.DeleteQuery;
                    break;
                }
            }
            return(customQuery);
        }
        private void createTask(SqlBuilderTask.QueryTypeEnum queryType)
        {
            var task = new SqlBuilderTask()
            {
                QueryType = queryType
            };

            createTask(task);
        }
        private string getStoredProcedureName(PocoSqlStoredProcedureMap spMap, object obj, SqlBuilderTask.QueryTypeEnum queryType)
        {
            if (spMap == null)
            {
                return(String.Empty);
            }
            if (String.IsNullOrEmpty(spMap.Name))
            {
                return(String.Format("{0}{1}_{2}", Configuration.StoredProceduresPrefix, obj.GetType().Name, queryType.ToString()));
            }

            return(spMap.Name);
        }
        private string getQueryFields(SqlBuilderTask.QueryTypeEnum queryType, IPocoSqlMapping map)
        {
            IEnumerable <PropertyInfo> propertyInfos = _obj.GetType().GetRuntimeProperties();

            string primaryKey = null;

            if (queryType == SqlBuilderTask.QueryTypeEnum.Update || queryType == SqlBuilderTask.QueryTypeEnum.Insert)
            {
                primaryKey = getPrimaryKey(_obj);
            }

            StringBuilder allFields    = new StringBuilder();
            StringBuilder insertValues = new StringBuilder();

            foreach (PropertyInfo propertyInfo in propertyInfos.Where(p => p.PropertyType.FullName.StartsWith("System") && !p.PropertyType.FullName.StartsWith("System.Collections"))) // only loop on objects that are not custom class
            {
                string
                                  dbSelect     = null,
                                  fieldName    = null,
                                  dbColumnName = null;

                if (map != null)
                {
                    PropertyMap propertyMap = map.GetMapping(propertyInfo.Name);
                    if (propertyMap != null)
                    {
                        if (!propertyMap.Ignored)
                        {
                            if (!propertyMap.ColumnName.Equals(propertyInfo.Name))
                            {
                                if (queryType == SqlBuilderTask.QueryTypeEnum.Select)
                                {
                                    dbSelect = String.Format("{0} as {1}",
                                                             propertyMap.ColumnName,
                                                             propertyInfo.Name);
                                }
                                fieldName    = propertyInfo.Name;
                                dbColumnName = propertyMap.ColumnName;
                            }
                        }
                        else
                        {
                            dbSelect = String.Empty;
                        }
                    }
                }

                if (String.IsNullOrEmpty(dbSelect))
                {
                    dbSelect = fieldName = dbColumnName = propertyInfo.Name;
                }

                if (fieldName == primaryKey)
                {
                    if (queryType == SqlBuilderTask.QueryTypeEnum.Update)
                    {
                        var    property = _obj.GetType().GetRuntimeProperty(dbColumnName);
                        string val      = "@" + primaryKey;
                        if (Configuration.ValuesInQueies)
                        {
                            property.GetValue(_obj).ToString();
                        }
                        this.Where(primaryKey + " = " + val);
                    }

                    if (queryType == SqlBuilderTask.QueryTypeEnum.Update || (queryType == SqlBuilderTask.QueryTypeEnum.Insert && map.GetPrimaryAutoGenerated()))
                    {
                        continue;
                    }
                }

                switch (queryType)
                {
                case SqlBuilderTask.QueryTypeEnum.Select:
                    allFields.Append((allFields.Length > 0 && !String.IsNullOrEmpty(fieldName) ? ", " : String.Empty) + dbSelect);
                    break;

                case SqlBuilderTask.QueryTypeEnum.Insert:
                    if (!String.IsNullOrEmpty(fieldName))
                    {
                        string insertVal;
                        if (Configuration.ValuesInQueies)
                        {
                            insertVal = getPropertyValueAsSql(_obj, fieldName);
                        }
                        else
                        {
                            insertVal = "@" + fieldName;
                        }

                        allFields.Append((allFields.Length > 0 ? ", " : String.Empty) + dbSelect);
                        insertValues.Append((insertValues.Length > 0 ? ", " : String.Empty) + insertVal);
                    }
                    break;

                case SqlBuilderTask.QueryTypeEnum.Update:
                case SqlBuilderTask.QueryTypeEnum.StoredProcedure:
                    string updateVal;
                    if (Configuration.ValuesInQueies)
                    {
                        updateVal = getPropertyValueAsSql(_obj, fieldName, true);
                    }
                    else
                    {
                        updateVal = "@" + fieldName;
                    }

                    allFields.Append((allFields.Length > 0 && !String.IsNullOrEmpty(fieldName) ? ", " : String.Empty) + dbColumnName + " = " + updateVal);
                    break;

                case SqlBuilderTask.QueryTypeEnum.Delete:

                    break;
                }
            }

            if (queryType == SqlBuilderTask.QueryTypeEnum.Insert)
            {
                return(String.Format("({0}) values({1})", allFields, insertValues));
            }
            else
            {
                return(allFields.ToString());
            }
        }
        private PocoSqlStoredProcedureMap getStoredProcedureMap(PocoSqlStoredProceduresMapping spMappings, SqlBuilderTask.QueryTypeEnum queryType)
        {
            switch (queryType)
            {
            case SqlBuilderTask.QueryTypeEnum.Select:
                return(spMappings.SelectMap);

            case SqlBuilderTask.QueryTypeEnum.Insert:
                return(spMappings.InsertMap);

            case SqlBuilderTask.QueryTypeEnum.Update:
                return(spMappings.UpdateMap);

            case SqlBuilderTask.QueryTypeEnum.Delete:
                return(spMappings.DeleteMap);

            default:
                return(null);
            }
        }