使用postgres复合类型,您基本上可以构建一个字段,其结构被定义为另一个表.我有一个名为"person"类型的"收件人"的复合字段.在我的特定方案中,此收件人字段通常为空.检查复合字段是否为空的正确方法是什么.我试过了:
select * from bla where recipient is not null
select * from bla where recipient is null
select * from bla where recipient = null
select * from bla where recipient != null
Run Code Online (Sandbox Code Playgroud)
在所有这些情况下,它都不会返回任何内容.那么如何正确检查复合值是否为空?
UPDATE
经过一些阅读后,看起来这是我的问题:
人们可能认为
!(x IS NULL) = x IS NOT NULL在所有情况下都是如此.但是有一个例外 - 复合类型.当复合值的NULL一个字段是另一个字段时NOT NULL,则两个运算符的结果都为假.IS NULL是真的,只有当所有的领域都是NULL.IS NOT NULL是真的,只有当所有的领域都是NOT NULL.对于介于两者之间的任何情况,两个运算符都返回false.
我确实有一些空字段,有些字段不是.我希望如果复合字段中的任何项不为null,则该字段将被视为非NULL,而不是当所有项都不为空时.除了检查每个字段之外还有什么方法吗?
我确实需要它作为一个环境变量,这是专门针对复合操作的。
在复合操作中,我尝试了许多不同的设置环境变量的方法。我发现做到这一点的唯一方法是在env步骤本身内部使用:
runs:
using: "composite"
steps:
- name: "A step"
env:
BRANCH_REF: "${{ github.ref }}"
run: echo "The branch is $BRANCH_REF"
shell: bash
Run Code Online (Sandbox Code Playgroud)
不幸的是,我需要动态设置这个变量。在常规操作中,我会做类似的事情:
env:
FOO: "${{ secrets.FOO }}"
#...
- run: echo "FOO=${{ github.event.inputs.foo }}" >> $GITHUB_ENV
if: ${{ github.event.inputs.foo != '' }}
Run Code Online (Sandbox Code Playgroud)
因为我做不到,所以我尝试了很多其他方法,但都不起作用。这是我最近的尝试,但也不起作用:
- name: "A step"
run: |
if ${{ github.event.inputs.foo != '' }}
then
echo "Set from manual input: ${{ github.event.inputs.foo }}"
echo "FOO=${{ github.event.inputs.foo }}" >> $GITHUB_ENV
else
echo "Use FOO …Run Code Online (Sandbox Code Playgroud) 我正在执行以下查询
SELECT COUNT(*)
FROM table
WHERE field1='value' AND (field2 >= 1000 OR field3 >= 2000)
Run Code Online (Sandbox Code Playgroud)
field1上有一个索引,field2和field3上有另一个索引.
我看到MySQL总是选择field1索引然后使用其他两个字段进行连接,这非常糟糕,因为它需要加入146.000行.
关于如何改进这个的建议?谢谢
(在提出试验解决方案后编辑)
基于提出的解决方案,我在使用它时在Mysql上看到过这个.
SELECT COUNT(*) FROM (SELECT * FROM table WHERE columnA = value1
UNION SELECT * FROM table WHERE columnB = value2) AS unionTable;
Run Code Online (Sandbox Code Playgroud)
比执行要慢很多:
SELECT COUNT(*)
FROM table
WHERE (columnA = value1 AND columnB = value2)
OR (columnA = value1 AND columnC = value3)
Run Code Online (Sandbox Code Playgroud)
有两个合成索引:
index1 (columnA,columnB)
index2 (columnA,columnC)
Run Code Online (Sandbox Code Playgroud)
有趣的是,要求Mysql"解释"它在两种情况下总是使用index1并且不使用index2的查询.
如果我将索引更改为:
index1 (columnB,columnA)
index2 (columnC,columnA)
Run Code Online (Sandbox Code Playgroud)
并查询:
SELECT COUNT(*)
FROM table
WHERE …Run Code Online (Sandbox Code Playgroud) 我正在设计一个数据库,用于存储源自许多不同来源的数据.我存储的实例由原始源分配唯一ID.我存储的每个实例都应包含有关其来源的信息,以及该源关联的ID.
例如,请考虑下表说明问题:
----------------------------------------------------------------
| source_id | id_on_source | data |
----------------------------------------------------------------
| 1 | 17600 | ... |
| 1 | 17601 | ... |
| 2 | 1 | ... |
| 3 | 1 | ... |
----------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
请注意,虽然id_on_source每个源都是唯一的,但可以id_on_source为不同的源找到相同的源.
我对关系数据库有一个很好的理解,但远非专家甚至是有经验的用户.我在设计中遇到的问题是我应该用作主键的问题.数据似乎决定使用复合主键(source_id, id_on_source).经过一番谷歌搜索后,我发现了一些关于复合主键优缺点的激烈争论,让我有点困惑.
该表与其他表具有一对多的关系,因此将在其他表的外键中引用.
我不依赖于特定的RDBMS,我不知道这是否事项的参数的缘故,但让我们说,我更喜欢的工作SQLite和MySQL.
在这种情况下使用复合外键有哪些优缺点?你更喜欢哪个?
我是Microsoft Smooth Streaming的新手,对复合清单的制作有疑问.
遵循这里的指导.
我能够制作一个在Silverlight播放器中播放的单个剪辑元素的复合清单.
但是,当我尝试从其他视频添加更多剪辑时,播放器刚停止工作并且没有提供任何错误信息.
而我这一切都是手工完成的.当我尝试使用Expression Encoder 4 Pro创建这样的视频时,我得到了一个普通.ismc文件而不是.csm文件.
我的问题是:
制作包含来自不同视频的剪辑的复合清单的最佳方法是什么?编码这些视频时是否有任何规范要遵循?或复合清单的支持是否对视频格式有任何限制?
最后一个是:有一种简单的方法来调试它(比如验证我的.csm文件)吗?
编辑我自己的解决方案:
看起来没有人关心这个,但是因为我终于解决了这个问题,所以我在这里写下这个来节省别人的时间.
为了调试复合清单,我在Visual Studio中构建了一个简单的Silverlight应用程序,并添加了一个简单的函数来报告错误:
MainPage.xaml.cs中:
public MainPage()
{
InitializeComponent();
this.SmoothPlayer.SmoothStreamingErrorOccurred += new EventHandler<SmoothStreamingErrorEventArgs>(SmoothPlayer_SmoothStreamingErrorOccurred);
}
public void SmoothPlayer_SmoothStreamingErrorOccurred(object sender,
SmoothStreamingErrorEventArgs e)
{
MessageBox.Show("Error: " + e.ErrorCode + "; " + e.ErrorMessage);
}
Run Code Online (Sandbox Code Playgroud)
我发现这个网页很有用.
你需要使用:
<c t="", d"">
Run Code Online (Sandbox Code Playgroud)
代替
<c d="">
Run Code Online (Sandbox Code Playgroud)
你必须正确计算ClipBegin和ClipEnd价值.
下面是在python一个示例代码转换.ismc到.csm(假设下面的ISM是清单XML内容的xml.etree.ElementTree对象表示):
def ism2csm(url, ism):
if ism is None: return …Run Code Online (Sandbox Code Playgroud) 什么时候应该使用ActiveRecord的composed_of类方法?
我正在开发一个用Java编写的小游戏(但这个问题与语言无关).因为我想探索各种设计模式,所以我对复合模式 /实体系统(我最初在这里和这里读到)作为典型的深层次继承的替代方案.
现在,在写了几千行代码后,我有点困惑.我认为理解模式,我喜欢使用它.我认为它非常酷,而且星巴克也是如此,但它觉得它提供的好处有点短暂而且(最让我烦恼的是)在很大程度上取决于你的粒度.
这是上面第二篇文章的图片:

我喜欢对象(游戏实体或任何你想要称之为的东西)的方式有一组最小的组件,推断的想法是你可以编写类似于下面的代码:
BaseEntity Alien = new BaseEntity();
BaseEntity Player = new BaseEntity();
Alien.addComponent(new Position(), new Movement(), new Render(), new Script(), new Target());
Player.addComponent(new Position(), new Movement(), new Render(), new Script(), new Physics());
Run Code Online (Sandbox Code Playgroud)
..这将是非常好的...但在现实中,代码最终看起来像
BaseEntity Alien = new BaseEntity();
BaseEntity Player = new BaseEntity();
Alien.addComponent(new Position(), new AlienAIMovement(), new RenderAlien(), new ScriptAlien(), new Target());
Player.addComponent(new Position(), new KeyboardInputMovement(), new RenderPlayer(), new ScriptPlayer(), new PhysicsPlayer());
Run Code Online (Sandbox Code Playgroud)
似乎我最终得到了一些由较少组件组成的非常专业的组件.通常,我必须制作一些具有其他组件依赖性的组件.毕竟,如果你没有位置,你怎么渲染?不仅如此,你最终渲染玩家与外星人和手榴弹的方式可能根本不同.除非你制作一个非常大的组件(在这种情况下......为什么你还在使用复合模式?),你不能拥有一个指示所有三个组件的组件.
给出另一个真实的例子.我的游戏中有角色可以装备各种装备.当装备一件装备时,会改变一些统计数据以及视觉上显示的内容.这是我的代码现在的样子:
billy.addControllers(new Movement(), new Position(), new CharacterAnimationRender(), new …Run Code Online (Sandbox Code Playgroud) 我尝试重新创建一个脚本,使用ImageMagick命令"转换"来组成图像.但我想在PHP中使用Imagick(版本6.6.2-10)做同样的事情.
命令如下:
convert A1.mpc A3.mpc A4.mpc -channel rgba -alpha on -virtual-pixel background -background none -define compose:args=312x26.6776 -compose displace -composite out.mpc
Run Code Online (Sandbox Code Playgroud)
我发现参数代表以下内容:
convert {background} {overlay} [{mask}] [-compose {method}] -composite {result}
Run Code Online (Sandbox Code Playgroud)
PHP Imagick给了我一个compose方法,但是没有mask参数:http://www.php.net/manual/en/imagick.compositeimage.php
我发现了另一个问题并尝试了这个(但不会产生相同的图像):
// load images
$a1 = new Imagick('a1.png');
$a3 = new Imagick('a3.png');
$a4 = new Imagick('a4.png');
// mask the overlay
$a1->compositeImage($a4, Imagick::COMPOSITE_DSTIN, 0, 0, Imagick::CHANNEL_ALPHA);
// compose overlay to background
$a1->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_BACKGROUND);
$a1->setImageBackgroundColor(new ImagickPixel('none'));
$a1->setOption('compose:args', '312x26.6776');
$a1->compositeImage($a3, Imagick::COMPOSITE_DISPLACE, 0, 0);
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:这是使用蒙版构图的正确方法吗?或者这里有什么问题?
为了帮助可视化我想要做的事情,这里有一些输入图像:
输入图像a1(背景):

输入图像a3(叠加):

输入图像a4(掩码):

我想要的结果是: …
我正在尝试为AWT Graphics2D实现类似SWT GC的xor-mode绘图.使用内置的XORComposite不是一个选项,因为它不像SWT那样实现xor-mode绘图.
SWT xor-mode绘图通过二进制异或结合源和目标颜色.AWT XORComposite(可用于g2d.setXORMode(Color))使用常量xor颜色,通过二进制异或与源颜色组合,或者目标颜色不影响结果颜色.
因此,我唯一想到的选择是编写自己的Composite和CompositeContext实现,它们适当地组合了源和目标.
一些阅读后,我想出了这个简单的实现:(是的,我知道与getPixel(...),setPixel(...)开销,我希望它优化之前正常工作的.)
private static class XorComposite implements Composite {
public static XorComposite INSTANCE = new XorComposite();
private XorContext context = new XorContext();
@Override
public CompositeContext createContext(ColorModel srcColorModel,
ColorModel dstColorModel, RenderingHints hints) {
return context;
}
}
private static class XorContext implements CompositeContext {
public XorContext() {
}
@Override
public void compose(Raster src, Raster dstIn, WritableRaster dstOut) {
int w = Math.min(src.getWidth(), dstIn.getWidth());
int …Run Code Online (Sandbox Code Playgroud) composite ×10
java ×2
sql ×2
activerecord ×1
aggregate ×1
android ×1
antialiasing ×1
awt ×1
database ×1
github ×1
iis ×1
imagick ×1
indexing ×1
manifest ×1
mask ×1
mysql ×1
null ×1
php ×1
postgresql ×1
primary-key ×1
silverlight ×1
where ×1
xor ×1