示例#1
0
 private static void GetLastRowId(DataConnection conn, IDbCommand cmd, Vita.Entities.Runtime.EntityRecord rec)
 {
     var idCmd = conn.DbConnection.CreateCommand();
       idCmd.CommandText = "SELECT last_insert_rowid();";
       idCmd.Transaction = conn.DbTransaction;
       var id = idCmd.ExecuteScalar(); //it is Int64
       Util.Check(id != null, "Failed to retrieve identity value for inserted row. Command: " + idCmd.CommandText);
       var member = rec.EntityInfo.Members.First(m => m.Flags.IsSet(EntityMemberFlags.Identity)); //idPrm.SourceColumn.Member;
       if (member.DataType != id.GetType())
     id = Convert.ChangeType(id, member.DataType);
       rec.SetValueDirect(member, id);
       idCmd.Connection = null; //to dispose prepared command
 }
示例#2
0
 // We cannot use regular access thru EntitySession - db info/version loads at the very start of connecting to db;
 // the entity app is not ready yet (schema not updated, etc).
 public DbVersionInfo LoadDbInfo(DbSettings settings, string appName, Vita.Data.Driver.DbModelLoader loader)
 {
     var thisSchema = settings.ModelConfig.GetSchema(this.Area);
       if (!loader.TableExists(thisSchema, "DbInfo"))
     return null;
       var dbInfoTableName = settings.Driver.GetFullName(thisSchema, "DbInfo");
       var dbModuleInfoTableName = settings.Driver.GetFullName(thisSchema, "DbModuleInfo");
       try {
     var dbInfo = new DbVersionInfo();
     var sql = string.Format("SELECT * FROM {0};", dbInfoTableName);
     var dt = loader.ExecuteSelect(sql);
     var appRow = dt.Rows.FindRow("AppName", appName);
     if (appRow != null) {
       dbInfo.InstanceType = (DbInstanceType)appRow.GetAsInt("InstanceType");
       var strVersion = appRow.GetAsString("Version");
       Version dbVersion;
       if (Version.TryParse(strVersion, out dbVersion))
     dbInfo.Version = dbVersion;
       // 'Values' column appears in v 1.1
       if (dt.Columns.Contains("Values")) {
     var strValues = appRow.GetAsString("Values");
     DeserializeValues(dbInfo, strValues);
       }
     } //if appRow
     //Read modules
     sql = string.Format("SELECT * FROM {0};", dbModuleInfoTableName);
     dt = loader.ExecuteSelect(sql);
     foreach(DataRow row in dt.Rows) {
       var moduleName = row.GetAsString("ModuleName");
       var schema = row.GetAsString("Schema");
       var strModuleVersion = row.GetAsString("Version");
       Version v;
       if (!Version.TryParse(strModuleVersion, out v))
     v = null;
       dbInfo.Modules.Add(new ModuleDbVersionInfo(schema, moduleName, v));
     }
     return dbInfo;
       } catch (Exception ex) {
     Trace.WriteLine("Failed to load DbInfo record:  " + ex.ToLogString());
     //Debugger.Break();
     return null;
       }
 }
示例#3
0
 public virtual bool IsSqlTier(Expression expression, Vita.Entities.Linq.LinqCommandKind kind)
 {
     var sqlExpr = expression as SqlExpression;
       if (sqlExpr != null) {
     switch(sqlExpr.SqlNodeType) {
       case SqlExpressionType.Select: case SqlExpressionType.Column: case SqlExpressionType.Table:
       case SqlExpressionType.ExternalValue: case SqlExpressionType.SqlFunction:
         return true;
       case SqlExpressionType.Group: case SqlExpressionType.MetaTable:
         return false;
       default: return true;
      }
       }
       switch (expression.NodeType) {
     case ExpressionType.ArrayLength:
     case ExpressionType.ArrayIndex:
     case ExpressionType.Call:
     case ExpressionType.Convert:
     case ExpressionType.ConvertChecked:
     case ExpressionType.Invoke:
     case ExpressionType.Lambda:
     case ExpressionType.ListInit:
     case ExpressionType.MemberAccess:
     case ExpressionType.MemberInit:
     case ExpressionType.New:
     case ExpressionType.NewArrayInit:
     case ExpressionType.NewArrayBounds:
     case ExpressionType.Parameter:
     case ExpressionType.SubtractChecked:
     case ExpressionType.TypeAs:
     case ExpressionType.TypeIs:
       return false;
     default:
       return true;
       }
 }
示例#4
0
 public Exploit(GetConnection getconn, string package, string appkeypath)
 {
     _vita = new Vita(getconn, INSTALL_NAME, package, appkeypath);
 }
示例#5
0
 public SubSelectExpression(SelectExpression select, Type type, string alias, Vita.Data.Model.DbTableInfo tableInfo)
     : base(type, alias, tableInfo)
 {
     this.Select = select;
     this.Alias = alias;
 }
示例#6
0
 public override bool IsSqlTier(System.Linq.Expressions.Expression expression, Vita.Entities.Linq.LinqCommandKind queryUse)
 {
     //MS SQL does not allow comparison operations in SELECT list
       if (expression.Type == typeof(bool)) {
     switch (expression.NodeType) {
       case ExpressionType.LessThan: case ExpressionType.LessThanOrEqual:
       case ExpressionType.GreaterThan: case ExpressionType.GreaterThanOrEqual:
       case ExpressionType.Equal: case ExpressionType.NotEqual:
         return false; //means SQL wouldn't support it
     }
       }//if
       return base.IsSqlTier(expression, queryUse);
 }
示例#7
0
 public USB(string package, string appkeypath)
 {
     _vita = new Vita(INSTALL_NAME, package, appkeypath);
 }
示例#8
0
 public SqlBuilder(Vita.Data.Model.DbModel dbModel)
 {
     _dbModel = dbModel;
       _sqlProvider = _dbModel.LinqSqlProvider;
 }