问题标签 [predicates]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
serialization - Hazelcast 的可移植版本:将日期转换为长会在谓词中引发异常
我正在尝试使用 com.hazelcast.nio.serialization.VersionedPortable 对 Customer 类进行序列化。默认情况下不支持日期序列化。所以我们需要将其转换为 Long
在 CustomerService 我有 findCustomersByDob 它使用 com.hazelcast.query.Predicate
在 idToCustomerMap.values(andPredicate); 我收到以下异常。
java.lang.IllegalArgumentException:无法在 com.hazelcast.query.impl.TypeConverters$LongConverter.convert(TypeConverters.java:159) 在 com.hazelcast.query 将 [Tue Jan 01 00:00:00 IST 1980] 转换为 long。 impl.IndexImpl.convert(IndexImpl.java:154) at com.hazelcast.query.impl.IndexImpl.getSubRecords(IndexImpl.java:148) at com.hazelcast.query.Predicates$GreaterLessPredicate.filter(Predicates.java:691)在 com.hazelcast.query.Predicates$AndPredicate.filter(Predicates.java:477) 在 com.hazelcast.query.impl.IndexService.query(IndexService.java:97) 在 com.hazelcast.map.impl.operation.QueryOperation .run(QueryOperation.java:92) 在 com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run(OperationRunnerImpl.java:137) 在 com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl。在 com.hazelcast.spi.impl.operationexecutor.classic.OperationThread.process(OperationThread. java:115) 在 com.hazelcast.spi.impl.operationexecutor.classic.OperationThread.doRun(OperationThread.java:101) 在 com.hazelcast.spi.impl.operationexecutor.classic.OperationThread.run(OperationThread.java:76)在 ------ 结束远程并开始本地堆栈跟踪 ------。(未知来源)在 com.hazelcast.spi.impl.operationservice.impl.InvocationFuture.resolveApplicationResponse(InvocationFuture.java:384) 在com.hazelcast.spi.impl.operationservice.impl.InvocationFuture.resolveApplicationResponseOrThrowException(InvocationFuture.java:334) 在 com.hazelcast.spi.impl.operationservice。impl.InvocationFuture.get(InvocationFuture.java:225) 在 com.hazelcast.spi.impl.operationservice.impl.InvocationFuture.get(InvocationFuture.java:204) 在 com.hazelcast.map.impl.client.AbstractMapQueryRequest.collectResults( AbstractMapQueryRequest.java:103) 在 com.hazelcast.map.impl.client.AbstractMapQueryRequest.invoke(AbstractMapQueryRequest.java:77) 在 com.hazelcast.client.impl.client.InvocationClientRequest.process(InvocationClientRequest.java:27) 在 com .hazelcast.client.impl.ClientEngineImpl$ClientPacketProcessor.processRequest(ClientEngineImpl.java:463) 在 com.hazelcast.client.impl.ClientEngineImpl$ClientPacketProcessor.run(ClientEngineImpl.java:379) 在 java.util.concurrent.ThreadPoolExecutor.runWorker (未知来源)在 java.util.concurrent.ThreadPoolExecutor$Worker。在 com.hazelcast.util.executor.HazelcastManagedThread.executeRun(HazelcastManagedThread.java:76) 在 com.hazelcast.util.executor.HazelcastManagedThread.run(HazelcastManagedThread) 的 java.lang.Thread.run(Unknown Source) 运行(Unknown Source) .java:92)在 ------ 结束远程并开始本地堆栈跟踪 ------。(未知来源)在 com.hazelcast.client.spi.impl.ClientInvocationFuture.resolveResponse(ClientInvocationFuture.java: 147) 在 com.hazelcast.client.spi.impl.ClientInvocationFuture.get(ClientInvocationFuture.java:114) 在 com.hazelcast.client.spi.impl.ClientInvocationFuture.get(ClientInvocationFuture.java:89) 在 com.hazelcast.client .spi.ClientProxy.invoke(ClientProxy.java:151) 在 com.hazelcast.client.proxy.ClientMapProxy.values(ClientMapProxy.java:837) 在 com.foo.hazelcast.client.services。CustomerServiceImpl.findCustomersByDob(CustomerServiceImpl.java:99) 在 com.foo.hazelcast.client.services.CustomerServiceTest.searchCustomersByDobRange(CustomerServiceTest.java:104) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl。在 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 在 java.lang.reflect.Method.invoke(Unknown Source) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 调用(Unknown Source) ) 在 org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 在 org.junit.internal.runners 的 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)。 org.junit.internal 上的 statements.InvokeMethod.evaluate(InvokeMethod.java:17)。在 org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) 在 org.springframework.test.context.junit4.statements 的 runners.statements.RunBefores.evaluate(RunBefores.java:26)。 RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94) 在 org.junit.runners.ParentRunner $3.run(ParentRunner.java:290) 在 org.junit.runners.ParentRunner$1。在 org.junit.runners.org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 在 org.junit.runners.schedule(ParentRunner.java:71).runChildren(ParentRunner.java:288)。 org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 的 ParentRunner$2.evaluate(ParentRunner.java:268) org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate (RunAfterTestClassCallbacks.java:70) 在 org.junit.runners.ParentRunner.run(ParentRunner.java:363) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) 在 org.eclipse。 jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 在 org.eclipse.jdt.internal.junit.runner.TestExecution。在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.runTests(RemoteTestRunner.java:459) 运行(TestExecution.java:38) java:675) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
虽然很明显异常是因为对 Date 的这种特殊处理,但我想知道 TypeConversion 的确切原因。我读到 Hazelcast 以序列化形式维护数据。所以这应该不是问题吧?
另外,我该如何克服这个问题?
编辑:我通过在谓词中传递 date.getTime() 解决了这个问题
我猜这是因为 hazelcast 以序列化形式维护数据,因此在尝试将 long 与谓词中的日期进行比较时会感到困惑。
不过,这种方法绝对不干净。有没有更简洁的方法可以在版本便携版中避免这种情况?
java-8 - JAVA 8 将谓词提取为字段或方法?
提取具有多种用途的谓词的更清洁方法是什么。方法或类字段?
两个例子:
1.类字段
2.方法
对我来说,现场方式看起来更好一点,但这是正确的方式吗?我有疑问。
java - Spring Data Specifications - 如何通过多个属性过滤对象
我正在尝试通过多个属性来实现对用户的搜索。假设我的 Person 有 Name 和 Lastname。我想输入“Michael Doe”并列出所有具有此姓名和姓氏的人。当我只输入“迈克尔”时,我想要所有迈克尔等等。
我试图通过使用如下谓词来实现它:
但是,当我搜索“Michael Doe”时,我找到了所有 Michaels 和 Lastname Doe。我该如何解决我的问题?
提前感谢您的帮助。
c# - 尝试将表与谓词生成器连接起来
我有两个要使用谓词生成器加入的表。在伪代码中,我想返回所有 StudentSchedule 行,在 StudentId 上加入 Student,其中 StudentLastName = "Smith"。
我可以为一个实体做这件事就好了-
oracle - Oracle 11 join with view 成本高
我在将视图加入另一个表时遇到了一些困难。这是在运行 11.2 的 Oracle RAC 系统上
我会尽量提供尽可能多的细节,而不涉及特定的表结构,因为我的公司不喜欢这样。
你们都知道这是如何工作的。“嘿,你能写一些非常丑陋的软件来实现我们疯狂的想法吗?”
他们想让我做的想法是创建一个视图,最终用户不知道他们是在跟踪新表还是旧表,因此其中一个表是返回“ON”的参数表或"OFF" 并在 case 语句中使用。
select子句中有一些不太难但嵌套的case语句
我有一个看法:
现在,当我运行查询时
查询运行良好,成本为 10。
但是,当我将此视图与另一个表连接时,一切都崩溃了。
一切都因屋顶而分崩离析。
我认为正在发生的是谓词没有被推送到视图中。因此,视图现在正在执行全表扫描并将所有内容连接到所有内容,然后最终删除所有行。我所做的每一个提示、调整或任何事情似乎都没有帮助。
在查看计划时,它看起来像是有谓词。
但这发生在一切都加入之后。
对不起,如果这很神秘,但任何帮助将不胜感激。
java - 在谓词上映射 SQL
我有一些 SQL
SQL 的结果令我满意,但无论如何我必须将该 SQL 映射到 JPA 的谓词。
我现在拥有的
谓词查询也返回一些冗余数据,除了 SQL 查询。
请更正我的谓词条件以获得与 sql 查询相同的结果。
非常感谢!
fragment - 词法分析器片段中的 Antlr4 动作和谓词
我正在尝试为 Antlr4 中动态确定的批处理分隔符创建词法分析器规则。这支持两个用例:
不同的数据库系统定义了自己的批处理分隔符(例如 'go'、';' '/')
我还希望允许用户定义的批处理分隔符最长为 2 个字符,并且可能是任何字符,但是对于这个示例,我们假设它们是 ascii 字符。
因此,就本示例而言,批处理分隔符是任何单独位于行中并与当前已知的批处理分隔符匹配的字符串。还有几个更复杂的替代方案,但我想保持简单,因为问题是关于词法分析器片段中的动作和语义谓词,而不是批处理分隔符。
所以假设我已经定义了一个名为 ALPHA 的词法分析器规则,它匹配任何大写或小写字母。另外,假设我只是想'\r'?'\n'<some-upto-two-char-string>'\r'?'\n'
在自己的行上匹配一个批处理分隔符,而没有其他空格可以抗衡
我定义了以下词法分析器规则:
此规则适用于大多数情况,除了它不考虑将输入批处理分隔符候选者动态匹配到批处理分隔符的有效值。SELECT
因此,尽管它会成功地使用 lex 'go'、';' 等,但当它们作为orCREATE FUNCTION
语句的一部分出现在自己的行上时,它会错误地将 lex 'IN'、'AS' 等作为批处理分隔符。
所以现在我采取下一步检查实际的字符匹配并定义一个isValidBatchSeparator()
在 @lexer::members
section 中调用的方法。此方法本质上将已知的批处理分隔符(由应用程序建立)_input.LA(-1)
与_input.LA(1)
如下所示(在伪代码中)进行比较:
所以现在我将我的词法分析器规则编写为:
这似乎可以正确转换。
我能够单步执行代码并验证是否确实输入了语义谓词并且该方法返回了正确的值。但是,输入 like'\r\nGO\r\n'
不会被解析为BATCH_SEPARATOR
. 相反,在代码后面的某个地方,我有一个定义,IDENTIFIER
它通常将标识符定义为一堆字符,当它不符合BATCH_SEPARATOR
规则时,它会捕获这个字符串。显然,应用于片段的语义谓词与应用于非片段词法分析器规则的语义谓词不同。
因此,我从词法分析器规则定义中删除了片段并成为BATCH_SEP_INNER
一等公民,但我的词法分析器语义谓词再次失败了,即使语义谓词代码似乎启动并返回正确的值,我仍然认为'\r\nGO\r\n'
lexed 为IDENTFIER
(甚至不是BATCH_SEP_INNER
)
我尝试了一些其他的事情,比如将语义谓词应用于BATCH_SEPARATOR
而不是BATCH_SEP_INNER
. 这里的问题是_input.LA(-1)
and_input.LA(1)
现在对应于'\r'
and'\n'
并且没有干净的方法来获取实际代表批处理分隔符的 ascii。例如,在更复杂的情况下,也有空格或NEWLINE
批处理分隔符 ascii 之前有几个 s。
因此,应用此语义谓词BATCH_SEPARATOR
总是无法匹配,并且我的输入字符串将无法正确进行词法分析。
我还尝试一isValidBatchSeparator()
分为二,将其作为一个动作应用,将该方法的输出存储到一个变量中,然后在应用于 BATCH_SEPARATOR 的语义谓词中使用该变量。像这样的东西:
如果我这样做,我会收到一条警告,指出动作已在片段中定义,因此永远不会运行。显然,使其成为非片段会破坏它修复的更多问题,因为作为非片段规则,BATCH_SEP_INNER
匹配任何两个 char 字符串并破坏很多很多东西。
所以作为最后的手段,我尝试了一些聪明的方法:
在最后一步中,我打算BATCH_SEP_INNER
运行该操作,但如果批处理分隔符无效,则在完成此操作后禁用词法分析器规则。然而,转换后的 Lexer 实际上跳过了整个动作。我可以看到生成了相应的代码,但从未遍历代码路径。
所以现在我没有想法,正在寻找这个论坛寻求帮助:)
java - 检查是否不满足谓词条件?
我在测试我的谓词后打印一个列表,我想知道是否有办法检查条件是否不满足?
xquery - 带有谓词的 XQuery 表达式
我正在尝试使用带有谓词的表达式来显示每个父节点的子节点(练习看起来很傻,因为这是测试数据:最终解决方案必须从其他 xml 文件中提取数据)。
数据样本如下:
查询如下:
出现的错误显示与第 8 行相关的“预期节点,找到数组”。我尝试了 for 循环,并简单地在学年标签内放置了一个表达式,如下所示
{doc("test.xml")/Schools/[School = $School]/AcademicYear/@year}
抱歉 - 我确定这很简单。我是初学者!
coq - coq 中的证明 - 谓词逻辑
尝试在 coq 中证明以下内容:证明全称量词分布在合取 ∀x ∈ A, P x ∧ Qx ⇐⇒ (∀x ∈ A, P x) ∧ (∀x ∈ A, Qx)
到目前为止我的证明-
我试图分裂、破坏和引入一个新的假设,但我似乎无法超越这一点。任何建议将不胜感激。