小编con*_*cat的帖子

MySQL - SELECT中的同时浮点递增和赋值在5.6之前中断

像查询为什么SELECT (@sum:=(@var:=@sum)+some_table.val)...自动转换(@var:=@sum)到整数MySQL的≤5.5为DECIMALsome_table.val和地板它DOUBLE/FLOAT?更改了哪些功能以允许5.6中的预期行为?


背景与细化:

请考虑下表:

CREATE TABLE t ( 
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    sum_component FLOAT 
);
INSERT INTO t (sum_component) VALUES (0.5), (0.6), (0.4), (0.5);
Run Code Online (Sandbox Code Playgroud)

我正在设计一个累积和查询,它获取id累积和大于某个值的条目.通常,此查询符合条例草案:

SELECT t.id, 
    @cumulative_sum
    FROM t 
    CROSS JOIN (SELECT @cumulative_sum:=0) a 
    WHERE (@cumulative_sum:=@cumulative_sum+t.sum_component) > 1.3 
    ORDER BY id ASC LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

...但我碰巧还需要在所选条目之前存储累积总和以及以后的计算,并且cumulative_sum从该查询中不返回预期结果,重复计算最后一个条目.在这种情况下,我希望此查询设置一个存储value 1.1(0.5 + 0.6)的变量,而不必进行额外的数学运算.

如果我在增量步骤中指定@cumulative_sumto 的旧值@another_variable,我应该能够做到这一点.

SELECT t.id, 
    @cumulative_sum …
Run Code Online (Sandbox Code Playgroud)

mysql select mariadb

15
推荐指数
1
解决办法
294
查看次数

GHC:对于具有固定值的呼叫,是否有一致的备忘录规则?

为了理解和利用GHC自动记忆,我碰壁了:当纯函数以诸如的固定值调用时fib 42,它们有时又快又慢。如果fib 42通过数学简单地或隐式地调用它们,则它们会有所不同(\x -> fib (x - 1)) 43。这些案件似乎没有押韵或理由,因此我将向他们提出这些案件的目的是询问行为背后的逻辑是什么。

考虑一个慢速的斐波那契实现,这使备忘录有效时显而易见:

slow_fib :: Int -> Integer
slow_fib n = if n < 2 then 1 else (slow_fib (n - 1)) + (slow_fib (n - 2))
Run Code Online (Sandbox Code Playgroud)

我测试了三个基本问题,以查看GHC(8.2.2版)是否可以使用固定参数来记录调用:

  1. 可以slow_fib访问以前的顶级通话slow_fib吗?
  2. 是否为以后的非平凡(例如数学)顶级表达式记忆了以前的结果?
  3. 是否为以后相同的顶级表达式记忆了以前的结果?

答案似乎是:

  1. 没有
  2. 没有
  3. 是[??]

最后一种情况有效的事实令我感到困惑:例如,如果我可以重印结果,那么我应该希望能够添加它们。这是显示此代码的代码:

main = do
  -- 1. all three of these are slow, even though `slow_fib 37` is 
  -- just the sum of the other two results. Definitely no …
Run Code Online (Sandbox Code Playgroud)

haskell memoization ghc

11
推荐指数
2
解决办法
108
查看次数

为什么类类型参数的方差必须与其方法的返回/参数类型参数的方差相匹配?

以下提出了投诉:

interface IInvariant<TInv> {}
interface ICovariant<out TCov> {
    IInvariant<TCov> M(); // The covariant type parameter `TCov'
                          // must be invariantly valid on
                          // `ICovariant<TCov>.M()'
}
interface IContravariant<in TCon> {
    void M(IInvariant<TCon> v); // The contravariant type parameter
                                // `TCon' must be invariantly valid
                                // on `IContravariant<TCon>.M()'
}
Run Code Online (Sandbox Code Playgroud)

但我无法想象这不会是类型安全的.(剪断*)这是不允许这样做的原因,还是有其他违反类型安全的情况我不知道?


*我最初的想法确实令人费解,但尽管如此,答案非常彻底,@ Theodoros Chatzigiannakis甚至以令人印象深刻的准确性解剖了我的初步假设.

除了回顾过去的好评之外,我意识到我错误地认为类型签名ICovariant::M仍然是一个Func<IInvariant<Derived>>当它ICovariant<Derived>被分配给a时ICovariant<Base>.然后,该分配MFunc<IInvariant<Base>>看起来罚款来自未来ICovariant<Base>,但当然会是非法的.为什么不禁止最后这个显然是非法的演员?(所以我认为)

正如埃里克·利珀特(Eric Lippert)所指出的那样,我觉得这种错误和切向猜测会减少这个问题,但出于历史目的,这个被剪切的部分:

对我来说最直观的解释是,以ICovariant协变为例,TCov …

c# generics generic-variance

10
推荐指数
2
解决办法
387
查看次数

MySQL:强制查询在WHERE子句中使用带有局部变量的索引

上下文

我有一个应用程序从表中选择加权随机条目,其中前缀总和(权重)是关键部分.简化的表定义如下所示:

CREATE TABLE entries (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    weight DECIMAL(9, 3),
    fenwick DECIMAL(9, 3)
) ENGINE=MEMORY;
Run Code Online (Sandbox Code Playgroud)

其中`fenwick`存储Fenwick树表示中的值`weights`.

让每个条目的"范围"跨越其前缀和与其前缀sum +其权重之间.应用程序必须@r0和之间生成一个随机数,SUM(weight)并查找其范围包含的条目@r,如下所示:

加权随机输入选择

Fenwick树,结合MEMORY引擎和二进制搜索,应该允许我及时找到合适的条目O(lg^2(n)),而不是O(n)天真查询的时间:

SELECT a.id-1 FROM (SELECT *, (@x:=@x+weight) AS counter FROM entries 
    CROSS JOIN (SELECT @x:=0) a
    HAVING counter>@r LIMIT 1) a;
Run Code Online (Sandbox Code Playgroud)

研究

由于多个查询的开销,我一直在尝试将前缀sum操作压缩成一个查询(而不是脚本语言中的几个数组访问).在这个过程中,我意识到传统的求和方法,即涉及按降序键顺序访问元素,只会求和第一个元素.我怀疑MySQL在WHERE子句中存在变量时会线性地运行表.这是查询:

SELECT
SUM(1) INTO @garbage
FROM entries 
CROSS JOIN (
    SELECT @sum:=0,
        @n:=@entryid
) …
Run Code Online (Sandbox Code Playgroud)

mysql indexing query-optimization fenwick-tree range-query

6
推荐指数
1
解决办法
480
查看次数

为什么Scala中的类型参数列表中的所有不变泛型类位置都不变?

我对下面的类型检查器的严格性感到有点困惑 - 似乎不变的T位置Inv[T]Variantish参数列表中也是不变的:

scala> class Inv[T]
defined class Inv

scala> class Variantish[+T, +TVar <: Inv[T]]
<console>:12: error: covariant type T occurs in invariant position in type  <: Inv[T] of type TVar
       class Variantish[+T, +TVar <: Inv[T]]
                             ^
Run Code Online (Sandbox Code Playgroud)

变体类型通常可以合法地出现在不变的参数列表位置,例如具有对象保护的可见性:

class Variantish[+T](protected[this] var v: Inv[T])
Run Code Online (Sandbox Code Playgroud)

并且似乎以下类似于类型安全:

class Variantish[+T, +TVar <: Inv[T]](protected[this] var v: TVar)
Run Code Online (Sandbox Code Playgroud)

需要上面提到的检查是如此严格?

generics scala invariance

5
推荐指数
1
解决办法
125
查看次数

NPM:如果父目录的node_modules满足依赖关系,则不安装

为了节省空间,我在所有项目的公共父目录中安装了大型软件包。这些项目中的脚本可以引用此父目录中的模块(请参阅Node\ 的文档),但npm install在新克隆的项目中 -ing 会拉取所有内容,而不仅仅是项目在继承的项目之上需要的模块来自共同的父母。是否有任何选项可以npm install只下载需要的内容?

\n\n

最小示例:考虑以下文件结构。

\n\n
\xe2\x94\x9c projects\n\xe2\x94\x82   \xe2\x94\x9c package.json <- specifies a dependency on `some_module^1.0.0`\n\xe2\x94\x82   \xe2\x94\x9c node_modules\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94 some_module\n\xe2\x94\x82   \xe2\x94\x82       \xe2\x94\x94 ...\n\xe2\x94\x82   \xe2\x94\x94 some_project\n\xe2\x94\x82       \xe2\x94\x94 package.json <- also specifies a dependency on `some_module^1.0.0`\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果npm install运行在projects/some_project,它将下载some_module无条件下载。

\n\n

(注:这与npm dedupe,因为这只是一个目录层次结构:父目录项目不依赖于任何子文件夹。)

\n

dependencies npm

5
推荐指数
0
解决办法
986
查看次数

INSERT + SELECT + ON DUPLICATE KEY 在 SELECT 子句中带有列别名

在 SELECT 子句具有列别名的查询中尝试将 INSERT、SELECT 和 ON DUPLICATE KEY 链接在一起时,我遇到了一个相当令人惊讶的障碍。例如,请考虑以下情况:

CREATE TABLE source ( 
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    v INT NOT NULL
);
INSERT INTO source (v) VALUES (1), (2), (3);
CREATE TABLE dest (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    v INT NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

假设我正在尝试填充dest.v值,POW(source.v,2)而不管值是否dest已经存在。当然,我试过:

INSERT INTO dest 
    SELECT id, POW(v, 2) AS p FROM source 
    ON DUPLICATE KEY UPDATE dest.v=source.p;
Run Code Online (Sandbox Code Playgroud)

但是,MySQL 坚持认为 source.p 不存在:

错误 1054 …

mysql select insert sql-update

3
推荐指数
1
解决办法
2636
查看次数

是否有任何 CSS 规则在设置为空字符串时会覆盖较低特异性的规则

我试图通过考虑内联样式和类样式来确定哪种样式适用于元素。Javascript 将这两者解析为对象,但未设置的样式是空字符串,而不是undefined. 如果“空”样式(例如width:;)没有任何效果,无论规则多么具体,那么我的目标就微不足道了。

但是,为了display:none动态覆盖默认规则,我知道这是document.getElementById('ele').style.display = '';可行的,虽然我知道它实际上并没有添加display内联样式,但在 CSS 中设置为空时是否有任何样式确实有效?如果是这种情况,我必须手动解析样式和样式表字符串以查看该属性是否已定义。

javascript css css-specificity

3
推荐指数
1
解决办法
2840
查看次数

如何修改IEnumerable <T>的成员?

之前关于泛型方差的问题中,我被告知IEnumerable<T>可以修改成员.如何做到这一点,并且当可以修改协变类型时出现方差违规,那么如何IEnumerable<T>协变T呢?

c# collections covariance

0
推荐指数
1
解决办法
62
查看次数