Exemple #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DataSetStoreDB"/> class
        /// </summary>
        /// <param name="dbInfo">
        /// The database information which will used to connect
        /// </param>
        /// <param name="cacheTableName">
        /// The cache database table name
        /// </param>
        /// <param name="keyFamily">
        /// The SDMX keyfamily bean
        /// </param>
        public DataSetStoreDB(DBInfo dbInfo, string cacheTableName, IDataStructureObject keyFamily, bool CreateTable, bool useAttr)
        {
            if (dbInfo == null)
            {
                throw new ArgumentNullException("dbInfo");
            }

            if (string.IsNullOrEmpty(cacheTableName))
            {
                throw new ArgumentNullException("cacheTableName");
            }

            if (keyFamily == null)
            {
                throw new ArgumentNullException("keyFamily");
            }

            this._dbInfo         = dbInfo;
            this._cacheTableName = cacheTableName;
            if (dbInfo.Connection.GetType().Name.Contains("Oracle"))
            {
                this._varChar = "varchar2";
            }

            kf = keyFamily;
            if (CreateTable)
            {
                this.CreateSqlTable(dbInfo, keyFamily);
            }
            else
            {
                this.PrepareSqlColumns(keyFamily);
            }

            parseSdmx = useAttr;
        }
Exemple #2
0
        /// <summary>
        /// Create the <see cref="_cacheTableName"/> table in the database specified in the given <see cref="DBInfo"/> with columns from the specified KeyFamily Bean
        /// It also populates the <see cref="_columns"/>. The components that are used are the Dimensions, TimeDimensions and Primary Measure. Depending on <see cref="ParseSdmxAttributes"/> the SDMX Attributes are either ignored or used
        /// </summary>
        /// <param name="dbInfo">
        /// The <see cref="DBInfo"/>
        /// </param>
        /// <param name="keyFamily">
        /// The key family bean
        /// </param>
        protected void CreateSqlTable(DBInfo dbInfo, IDataStructureObject keyFamily)
        {
            var createTable       = new StringBuilder("CREATE TABLE " + this._cacheTableName + " (");
            var primaryMeasureKey = new StringBuilder();

            // dimensions add them all and to primary key
            foreach (IDimension comp in keyFamily.DimensionList.Dimensions)
            {
                if (!comp.TimeDimension)
                {
                    createTable.AppendFormat("{0} {1}({2}) NOT NULL,", comp.Id, this._varChar, VarCharSize);

                    createTable.AppendLine();
                    this._columns.Add(comp.Id, null);
                    if (comp.MeasureDimension)
                    {
                        this._measureColumn = comp.Id;
                    }

                    primaryMeasureKey.Append(comp.Id);
                    primaryMeasureKey.Append(",");
                }
            }

            primaryMeasureKey.Length--;
            if (keyFamily.TimeDimension != null)
            {
                createTable.AppendFormat(
                    "{0} {1}({2}) NOT NULL,", keyFamily.TimeDimension.Id, this._varChar, VarCharSize);
                primaryMeasureKey.Append(",");
                primaryMeasureKey.Append(keyFamily.TimeDimension.Id);

                /*
                 * lastComma = createTable.Length -1 ;
                 */
                createTable.AppendLine();
                this._columns.Add(keyFamily.TimeDimension.Id, null);
            }

            createTable.AppendFormat("{0} {1}({2}),", keyFamily.PrimaryMeasure.Id, this._varChar, VarCharSize);
            int lastComma = createTable.Length - 1;

            createTable.AppendLine();
            this._columns.Add(keyFamily.PrimaryMeasure.Id, null);
            if (this.ParseSdmxAttributes)
            {
                foreach (IAttributeObject comp in keyFamily.Attributes)
                {
                    createTable.AppendFormat("{0} {1}({2}),", comp.Id, this._varChar, VarCharSize);
                    this._columns.Add(comp.Id, null);
                    lastComma = createTable.Length - 1;
                    createTable.AppendLine();
                }
            }

            if (primaryMeasureKey.Length > 0)
            {
                createTable.Append("PRIMARY KEY(");
                createTable.Append(primaryMeasureKey);
                createTable.Append(")");
                createTable.AppendLine();
            }
            else
            {
                createTable.Length = lastComma;
            }

            createTable.Append(")");
            using (DbCommand scmd = dbInfo.TransactionCommand)
            {
                scmd.CommandText = createTable.ToString();
                scmd.ExecuteNonQuery();
            }
            dbInfo.Commit();
        }
        internal IDataSetStore GetDataset(IDataflowObject df, IDataStructureObject kf, List<DataCriteria> Criterias, ref Dictionary<string, List<DataChacheObject>> DataCache,bool useAttr)
        {
            // if it is not time series then assume it is cross
            SDMXWSFunction op = SDMXWSFunction.GetCompactData;
            bool cross = (DataObjConfiguration._TypeEndpoint == EndpointType.V21 || DataObjConfiguration._TypeEndpoint == EndpointType.REST)
                          ? NsiClientHelper.DataflowDsdIsCrossSectional(kf) : !Utils.IsTimeSeries(kf);
            if (cross)
                op = SDMXWSFunction.GetCrossSectionalData;

            var ser = new JavaScriptSerializer();
            ser.MaxJsonLength = int.MaxValue;
            try
            {
                //commentato vecchio codice
                //IGetSDMX GetSDMXObject = WebServiceSelector.GetSdmxImplementation(DataObjConfiguration);
                //GetSDMXObject.ExecuteQuery(CreateQueryBean(df, kf, Criterias), op, FileTmpData);

                /*
                #region Connessione e Creazione DB SQLLite
                string table = Path.Combine(Utils.GetAppPath(), string.Format(CultureInfo.InvariantCulture, "{0}-{1}.sqlite", Utils.MakeKey(df).Replace("+", "_").Replace(".", ""), Guid.NewGuid()));
                string ConnectionString = string.Format(CultureInfo.InvariantCulture, Constants.FileDBSettingsFormat, table);
                var info = new DBInfo(ConnectionString);
                string tempTable = "table_" + Utils.MakeKey(df).Replace("+", "_").Replace(".", "");
                IDataSetStore store = new DataSetStoreDB(info, tempTable, kf, true, useAttr);
                #endregion
                fine vecchio codice*/

                //Salvo in Session
                /*
                if (DataCache == null)
                    DataCache = new Dictionary<string, List<DataChacheObject>>();
                if (!DataCache.ContainsKey(Utils.MakeKey(df)))
                    DataCache[Utils.MakeKey(df)] = new List<DataChacheObject>();
                */
                //string table=null;
                //FABIO NEW
                //IDataSetStore store = FindDataCacheChart(df, kf, Criterias, ref DataCache, useAttr,out table);

                //if (store == null) store = GetDataset(df, kf, Criterias, ref DataCache, useAttr);
                #region Connessione e Creazione DB SQLLite FABIO se nullo lo istanzio
            //                if (store == null)
            //                {
                    string table = null;
                    IGetSDMX GetSDMXObject = WebServiceSelector.GetSdmxImplementation(DataObjConfiguration);
                    GetSDMXObject.ExecuteQuery(CreateQueryBean(df, kf, Criterias), op, FileTmpData);

                    #region Connessione e Creazione DB SQLLite
                    table = Path.Combine(Utils.GetAppPath(), string.Format(CultureInfo.InvariantCulture, "{0}-{1}.sqlite", Utils.MakeKey(df).Replace("+", "_").Replace(".", ""), Guid.NewGuid()));
                    string ConnectionString = string.Format(CultureInfo.InvariantCulture, Constants.FileDBSettingsFormat, table);
                    var info = new DBInfo(ConnectionString);
                    string tempTable = "table_" + Utils.MakeKey(df).Replace("+", "_").Replace(".", "");
                    IDataSetStore store = new DataSetStoreDB(info, tempTable, kf, true, useAttr);
                    #endregion

                    using (var dataLocation = new FileReadableDataLocation(FileTmpData))
                    {
                        switch (op)
                        {
                            case SDMXWSFunction.GetCompactData:
                                var compact = new CompactDataReaderEngine(dataLocation, df, kf);
                                var readerCompact = new SdmxDataReader(kf, store);
                                readerCompact.ReadData(compact);
                                break;

                            case SDMXWSFunction.GetCrossSectionalData:
                                var dsdCrossSectional = (ICrossSectionalDataStructureObject)kf;
                                var crossSectional = new CrossSectionalDataReaderEngine(dataLocation, dsdCrossSectional, df);
                                var reader = new SdmxDataReader(kf, store);
                                reader.ReadData(crossSectional);
                                break;

                            default:
                                throw new ArgumentException(Resources.ExceptionUnsupported_operation + op.ToString(), "operation");
                        }
                    }

            //                }
                #endregion FABIO

                //using (var dataLocation = new FileReadableDataLocation(FileTmpData))
                //{
                //    switch (op)
                //    {
                //        case SDMXWSFunction.GetCompactData:
                //            var compact = new CompactDataReaderEngine(dataLocation, df, kf);
                //            var readerCompact = new SdmxDataReader(kf, store);
                //            readerCompact.ReadData(compact);
                //            break;

                //        case SDMXWSFunction.GetCrossSectionalData:
                //            var dsdCrossSectional = (ICrossSectionalDataStructureObject)kf;
                //            var crossSectional = new CrossSectionalDataReaderEngine(dataLocation, dsdCrossSectional, df);
                //            var reader = new SdmxDataReader(kf, store);
                //            reader.ReadData(crossSectional);
                //            break;

                //        default:
                //            throw new ArgumentException(Resources.ExceptionUnsupported_operation + op.ToString(), "operation");
                //    }
                //}

                /*
                Dictionary<string, List<string>> Criteri = new Dictionary<string, List<string>>();
                Criterias.ForEach(c => Criteri.Add(c.component, c.values));
                DataChacheObject dco = new DataChacheObject()
                {
                    Criterias = Criteri,
                    DBFileName = table,
                };

                //aggiunta da fabio
                DataCache[Utils.MakeKey(df)].Clear();
                //fine aggiunta fabio
                DataCache[Utils.MakeKey(df)].Add(dco);
                 */
                return store;
            }
            catch (Exception ex)
            {
                Logger.Warn(ex.Message, ex);
                throw ex;
            }
            finally
            {
                //delete the temporary file
                if (File.Exists(FileTmpData))
                    File.Delete(FileTmpData);

            }
        }
 private static IDataSetStore BuildDBDataSetStore(SessionQuery query, ConnectionStringSettings settings)
 {
     var info = new DBInfo(settings);
     string tempTable = "table_" + Path.GetRandomFileName().Replace(".", "_");
     query.AddToDataDisposeList(info);
     return new DataSetStoreDB(info, tempTable, query.KeyFamily,true,false);
 }
        internal IDataSetStore FindDataCacheChart(IDataflowObject df, IDataStructureObject kf, List<DataCriteria> Criterias, ref Dictionary<string, List<DataChacheObject>> DataCache, bool useAttr, out string DBFileName)
        {
            DataChacheObject findCache = null;
            Dictionary<string, List<string>> Criteri = new Dictionary<string, List<string>>();
            Criterias.ForEach(c => Criteri.Add(c.component, c.values));
            DBFileName = null;

            if (DataCache != null)
            {
                string DfID = Utils.MakeKey(df);
                if (DataCache.ContainsKey(DfID))
                {
                    List<DataChacheObject> singleDataCache = DataCache[DfID];
                    findCache = singleDataCache.Find(dc => DictionaryEqual(dc.Criterias, Criteri));
                }
            }

            if (findCache != null)
            {
                if (!string.IsNullOrEmpty(findCache.DBFileName) && File.Exists(findCache.DBFileName))
                {
                    #region Connessione e Creazione DB SQLLite
                    string ConnectionString = string.Format(CultureInfo.InvariantCulture, Constants.FileDBSettingsFormat, findCache.DBFileName);
                    var info = new DBInfo(ConnectionString);
                    string tempTable = "table_" + Utils.MakeKey(df).Replace("+", "_").Replace(".", "");
                    IDataSetStore store = new DataSetStoreDB(info, tempTable, kf, false, useAttr);
                    DBFileName = findCache.DBFileName;
                    return store;
                    #endregion
                }
                return null;
            }
            return null;
        }