Example #1
0
        /////////////////////////////////////////////////////////////////////////////////////
        public CResultAErreur ExecuteRequeteComplexe(C2iChampDeRequete[] champs, CArbreTable arbreTables, CFiltreData filtre)
        {
            CResultAErreur result = CResultAErreur.True;

            result.EmpileErreur(I.T("Function not implemented|177"));
            return(result);
        }
Example #2
0
        /////////////////////////////////////////////////////////////////////////////////////
        public override void CreateJoinPourLiens(
            CFiltreData filtre,
            CArbreTable arbreTables,
            CComposantFiltre composantFiltre,
            ref bool bDistinct,
            ref string strJoin,
            ref string strWhere,
            ref string strPrefixeFrom)
        {
            strJoin = "";
            arbreTables.SortTablesLiees();
            foreach (CArbreTableFille arbreFils in arbreTables.TablesLiees)
            {
                strPrefixeFrom += "(";
                if (arbreFils.IsLeftOuter)
                {
                    strJoin += " LEFT OUTER JOIN ";
                }
                else
                {
                    strJoin += " INNER JOIN ";
                }
                if (arbreFils.Relation.IsRelationFille)
                {
                    bDistinct = true;
                }
                string strTable;
                strTable = CContexteDonnee.GetNomTableInDbForNomTable(arbreFils.NomTable) +
                           GetSqlForAliasDecl(arbreFils.Alias);
                string strSuiteFrom  = "";
                string strSuiteWhere = "";
                string strPrefixe    = "";
                CreateJoinPourLiens(filtre, arbreFils, composantFiltre, ref bDistinct, ref strSuiteFrom, ref strSuiteWhere, ref strPrefixe);
                strJoin += strPrefixe;
                if (strSuiteFrom.Trim() != "")
                {
                    strTable = "(" + strTable;
                }
                strTable += strSuiteFrom;
                if (strSuiteFrom.Trim() != "")
                {
                    strTable += ")";
                }
                strJoin += strTable;
                strJoin += " ON (";
                CInfoRelationComposantFiltre relation = arbreFils.Relation;
                string strAliasParent, strAliasFille;
                string strTableDependante = "";
                if (relation.IsRelationFille)
                {
                    strAliasParent     = arbreTables.Alias;
                    strAliasFille      = arbreFils.Alias;
                    strTableDependante = arbreFils.NomTable;
                }
                else
                {
                    strAliasParent     = arbreFils.Alias;
                    strAliasFille      = arbreTables.Alias;
                    strTableDependante = arbreTables.NomTable;
                }
                string strJointure = relation.GetJoinClause(strAliasParent, "", strAliasFille, "");

                string strComplementVersion = "";
                if (EstCeQueLaTableGereLesVersions(strTableDependante) && !filtre.IntegrerLesElementsSupprimes)
                {
                    strComplementVersion = "(" + strAliasFille + "." + CSc2iDataConst.c_champIsDeleted + "=0 or " +
                                           strAliasFille + "." + CSc2iDataConst.c_champIsDeleted + " is null)";
                }
                string strIdsVersionsALire = filtre.GetStringListeIdsVersionsALire(',');
                if (EstCeQueLaTableGereLesVersions(strTableDependante))
                {
                    if (strComplementVersion != "")
                    {
                        strComplementVersion += " and ";
                    }
                    if (strIdsVersionsALire == null)
                    {
                        strComplementVersion += strAliasFille + "." + CSc2iDataConst.c_champIdVersion + " is null";
                    }
                    else
                    {
                        strComplementVersion += "(" + strAliasFille + "." + CSc2iDataConst.c_champIdVersion + " in (" + strIdsVersionsALire + ") or " +
                                                strAliasFille + "." + CSc2iDataConst.c_champIdVersion + " is null)";
                    }
                }
                if (strComplementVersion != "")
                {
                    if (strWhere != "")
                    {
                        strWhere += " and (" + strComplementVersion + ") and (";
                    }
                    else
                    {
                        strWhere += "(";
                    }
                    strWhere += strComplementVersion + ")";
                }
                strJoin += strJointure + "))";
                if (composantFiltre != null)
                {
                    composantFiltre.DefinitAlias(arbreFils.CheminRelations, arbreFils.Alias);
                }
                if (filtre is CFiltreDataAvance)
                {
                    foreach (CComposantFiltreChamp champ in ((CFiltreDataAvance)filtre).ChampsAAjouterAArbreTable)
                    {
                        champ.DefinitAlias(arbreFils.CheminRelations, arbreFils.Alias);
                    }
                }
            }
        }
        /// ////////////////////////////////
        public CResultAErreur ExecuteRequete(C2iRequeteAvancee requete)
        {
            CResultAErreur result   = CResultAErreur.True;
            string         strTable = requete.TableInterrogee;
            //S'il y a un filtre sur la requête avancée,
            //On prépare d'abord la sous requête de sélection des ids qui nous
            //Interessent

            Type typeReference = CContexteDonnee.GetTypeForTable(strTable);

            if (typeReference == null)
            {
                result.EmpileErreur(I.T("Impossible to define the associated type with @1|121", strTable));
                return(result);
            }

            IDatabaseConnexion con;

            if (typeReference == null)
            {
                con = CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, "");
            }
            else
            {
                con = CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, typeReference);
            }


            CFiltreData filtre = requete.FiltreAAppliquer;
            CArbreTable arbre  = null;
            bool        bHasVersionSurTablePrincipale = false;
            Type        tpObjet = CContexteDonnee.GetTypeForTable(requete.TableInterrogee);

            if (tpObjet != null && !typeof(IObjetSansVersion).IsAssignableFrom(tpObjet) &&
                typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(tpObjet))
            {
                bHasVersionSurTablePrincipale = true;
            }
            if (bHasVersionSurTablePrincipale)
            {
                CFiltreDataAvance filtreVersion = new CFiltreDataAvance(strTable, "");
                //Lecture dans le référentiel
                if (requete.IdVersionDeTravail == null && (filtre == null || !filtre.IgnorerVersionDeContexte))
                {
                    filtreVersion.Filtre = "HasNo(" + CSc2iDataConst.c_champIdVersion + ")";
                }
                //Ignorer les suppressions
                if (filtre != null && !filtre.IntegrerLesElementsSupprimes)
                {
                    if (filtreVersion.Filtre != "")
                    {
                        filtreVersion.Filtre += " and ";
                    }
                    filtreVersion.Filtre += CSc2iDataConst.c_champIsDeleted + "=0";
                }


                //Lecture dans une version
                if (requete.IdVersionDeTravail != null && (filtre == null || !filtre.IgnorerVersionDeContexte) && requete.IdVersionDeTravail >= 0)
                {
                    if (filtre == null)
                    {
                        filtre = new CFiltreData();
                    }
                    filtre.IdsDeVersionsALire = CVersionDonnees.GetVersionsToRead(IdSession, (int)requete.IdVersionDeTravail);
                }

                if (filtreVersion.Filtre != "")
                {
                    filtre = CFiltreData.GetAndFiltre(filtre, filtreVersion);
                }
            }
            if (filtre != null && filtre is CFiltreDataAvance)
            {
                result = ((CFiltreDataAvance)filtre).GetArbreTables();
                if (!result)
                {
                    return(result);
                }
                arbre = (CArbreTable)result.Data;
            }

            result = requete.CalculeArbre(arbre);
            if (!result)
            {
                return(result);
            }
            arbre = (CArbreTable)result.Data;

            int nOldTimeOut = con.CommandTimeOut;

            con.CommandTimeOut = 60 * 2;
            result             = con.ExecuteRequeteComplexe(requete.Champs, arbre, filtre);
            con.CommandTimeOut = nOldTimeOut;
            return(result);
        }
Example #4
0
        /// /////////////////////////////////////////////////////
        public override void CreateJoinPourLiens(
            CFiltreData filtre,
            CArbreTable arbreTables,
            CComposantFiltre composantFiltre,
            ref bool bDistinct,
            ref string strFrom,
            ref string strWhere)
        {
            strFrom  = "";
            strWhere = "";
            foreach (CArbreTableFille arbreFils in arbreTables.TablesLiees)
            {
                if (arbreFils.Relation.IsRelationFille)
                {
                    bDistinct = true;
                }

                string strNomTableFils = CContexteDonnee.GetNomTableInDbForNomTable(arbreFils.NomTable);
                strNomTableFils = GetPrefixeForTable(arbreFils.NomTable) + strNomTableFils;

                strFrom += "," + strNomTableFils + GetSqlForAliasDecl(arbreFils.Alias);

                string strSuiteFrom  = "";
                string strSuiteWhere = "";
                CreateJoinPourLiens(filtre, arbreFils, composantFiltre, ref bDistinct, ref strSuiteFrom, ref strSuiteWhere);

                if (strSuiteFrom != "")
                {
                    strFrom += strSuiteFrom;
                }
                if (strWhere.Trim() != "" && strSuiteWhere.Trim() != "")
                {
                    strWhere += " and (" + strSuiteWhere + ")";
                }
                if (strWhere.Trim() == "" && strSuiteWhere.Trim() != "")
                {
                    strWhere = strSuiteWhere;
                }

                //Equivalence WHERE ( MACOL = MACOL (+))
                CInfoRelationComposantFiltre relation = arbreFils.Relation;
                string strAliasParent, strAliasFille;
                string strSuffixeParent = "";
                string strSuffixeFils   = "";
                string strTableDependante = "";
                if (relation.IsRelationFille)
                {
                    strAliasParent     = arbreTables.Alias;
                    strAliasFille      = arbreFils.Alias;
                    strTableDependante = arbreFils.NomTable;
                    if (arbreFils.IsLeftOuter)
                    {
                        strSuffixeFils = "(+)";
                    }
                }
                else
                {
                    strAliasParent     = arbreFils.Alias;
                    strAliasFille      = arbreTables.Alias;
                    strTableDependante = arbreTables.Alias;
                    if (arbreFils.IsLeftOuter)
                    {
                        strSuffixeParent = "(+)";
                    }
                }
                string strTmp = relation.GetJoinClause(strAliasParent, strSuffixeParent, strAliasFille, strSuffixeFils);
                string strComplementVersion = "";
                if (EstCeQueLaTableGereLesVersions(strTableDependante) && !filtre.IntegrerLesElementsSupprimes)
                {
                    strComplementVersion = "(" + strAliasFille + "." + CSc2iDataConst.c_champIsDeleted + "=0 or " +
                                           strAliasFille + "." + CSc2iDataConst.c_champIsDeleted + " is null)";
                }
                string strIdsVersionsALire = filtre.GetStringListeIdsVersionsALire(',');
                if (EstCeQueLaTableGereLesVersions(strTableDependante))
                {
                    if (strComplementVersion != "")
                    {
                        strComplementVersion += " and ";
                    }
                    if (strIdsVersionsALire == null)
                    {
                        strComplementVersion += strAliasFille + "." + CSc2iDataConst.c_champIdVersion + " is null";
                    }
                    else
                    {
                        strComplementVersion += "(" + strAliasFille + "." + CSc2iDataConst.c_champIdVersion + " in (" + strIdsVersionsALire + ") or " +
                                                strAliasFille + "." + CSc2iDataConst.c_champIdVersion + " is null)";
                    }
                }
                if (strComplementVersion != "")
                {
                    if (strTmp != "")
                    {
                        strTmp = "((" + strTmp + ") and ";
                    }
                    else
                    {
                        strAliasFille += "(";
                    }
                    strTmp += strComplementVersion + ")";
                }
                if (strWhere.Trim() != "")
                {
                    strWhere = "(" + strTmp + ") and (" + strWhere + ")";
                }
                else
                {
                    strWhere = strTmp;
                }

                if (composantFiltre != null)
                {
                    composantFiltre.DefinitAlias(arbreFils.CheminRelations, arbreFils.Alias);
                }
            }
        }
Example #5
0
        public override CResultAErreur ExecuteRequeteComplexe(C2iChampDeRequete[] champs, CArbreTable arbreTables, CFiltreData filtre)
        {
            CResultAErreur result = base.ExecuteRequeteComplexe(champs, arbreTables, filtre);

            if (!result)
            {
                return(result);
            }
            else
            {
                DataTable dt = ((CDataTableFastSerialize)result.Data).DataTableObject;
                foreach (C2iChampDeRequete ch in champs)
                {
                    string colch = ch.NomChamp.ToUpper();
                    for (int ncol = dt.Columns.Count; ncol > 0; ncol--)
                    {
                        DataColumn col = dt.Columns[ncol - 1];

                        if (col.ColumnName == colch)
                        {
                            dt.Columns.Add(new DataColumn(col.ColumnName + "_2", ch.TypeDonnee));
                            foreach (DataRow dr in dt.Rows)
                            {
                                dr[col.ColumnName + "_2"] = dr[col];
                            }

                            dt.Columns.Remove(col);
                            dt.Columns[col.ColumnName + "_2"].ColumnName = col.ColumnName;
                            break;
                        }
                    }
                }
            }
            return(result);
        }