#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to you under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# Database of contributors to Apache Calcite.
# Pages such as developer.md use this data.
# List must be sorted by first name, last name.
#
- name: Alan Gates
  emeritus: 2018/05/04
  apacheId: gates
  githubId: alanfgates
  org: Hortonworks
  role: PMC
- name: Aman Sinha
  apacheId: amansinha
  githubId: amansinha100
  org: MapR
  role: PMC
- name: Andrei Sereda
  apacheId: sereda
  githubId: asereda-gs
  org:
  role: Committer
- name: Ashutosh Chauhan
  apacheId: hashutosh
  githubId: ashutoshc
  org: Hortonworks
  role: PMC
- name: Chris Baynes
  apacheId: cbaynes
  githubId: chris-baynes
  org: Contiamo
  role: Committer
- name: Christian Beikov
  apacheId: cbeikov
  githubId: beikov
  org: Blazebit
  role: Committer
- name: Chunwei Lei
  apacheId: chunwei
  githubId: chunweilei
  org: Alibaba
  role: Committer
- name: Danny Chan
  apacheId: danny0405
  githubId: danny0405
  org: Alibaba
  role: PMC
- name: Edmon Begoli
  apacheId: ebegoli
  githubId: ebegoli
  org: Oak Ridge National Laboratory
  role: Committer
- name: Feng Zhu
  apacheId: fengzhu
  githubId: DonnyZone
  org: Tencent
  role: Committer
- name: Forward Xu
  apacheId: forwardxu
  githubId: XuQianJin-Stars
  org: Tencent
  role: Committer
- name: Francis Chuang
  apacheId: francischuang
  githubId: F21
  org: Boostport
  role: PMC
- name: Gian Merlino
  apacheId: gian
  githubId: gianm
  org: Imply
  role: Committer
- name: Haisheng Yuan
  apacheId: hyuan
  githubId: hsyuan
  org: Alibaba
  role: PMC Chair
- name: Hongze Zhang
  apacheId: hongze
  githubId: zhztheplayer
  org: Tencent
  role: Committer
- name: James R. Taylor
  apacheId: jamestaylor
  githubId: JamesRTaylor
  org: Salesforce
  role: PMC
- name: Jacques Nadeau
  apacheId: jacques
  githubId: jacques-n
  org: Dremio
  role: PMC
- name: Jess Balint
  apacheId: jbalint
  githubId: jbalint
  org: Stardog
  role: Committer
- name: Jesús Camacho Rodríguez
  apacheId: jcamacho
  githubId: jcamachor
  org: Hortonworks
  role: PMC
- name: Jinfeng Ni
  apacheId: jni
  githubId: jinfengni
  org: MapR
  role: PMC
- name: Jin Xing
  apacheId: jinxing
  githubId: jinxing64
  org: Ant Financial
  role: Committer
- name: John Pullokkaran
  apacheId: jpullokk
  githubId: jpullokkaran
  org: Hortonworks
  role: PMC
- name: Josh Elser
  apacheId: elserj
  githubId: joshelser
  org: Hortonworks
  role: PMC
- name: Julian Feinauer
  apacheId: jfeinauer
  githubId: JulianFeinauer
  org: Pragmatic Minds
  role: Committer
- name: Julian Hyde
  apacheId: jhyde
  githubId: julianhyde
  pronouns: he/him
  org: Google
  role: PMC
  homepage: http://people.apache.org/~jhyde
- name: Kevin Liew
  apacheId: kliew
  githubId: kliewkliew
  org:
  role: Committer
- name: Kevin Risden
  apacheId: krisden
  githubId: risdenk
  org:
  role: PMC
- name: Laurent Goujon
  apacheId: laurent
  githubId: laurentgo
  org: Dremio
  role: PMC
- name: Liya Fan
  apacheId: liyafan
  githubId: liyafan82
  org: Alibaba
  role: Committer
- name: Maryann Xue
  apacheId: maryannxue
  githubId: maryannxue
  org: Intel
  role: PMC
- name: Michael Mior
  apacheId: mmior
  githubId: michaelmior
  pronouns: he/him
  org: Rochester Institute of Technology
  role: PMC
  homepage: https://michael.mior.ca/
- name: Milinda Pathirage
  apacheId: milinda
  githubId: milinda
  org: Indiana University
  role: Committer
  homepage: http://milinda.pathirage.org/
- name: MinJi Kim
  apacheId: minji
  githubId: minji-kim
  org: Oracle
  role: Committer
- name: Muhammad Gelbana
  apacheId: mgelbana
  githubId: MGelbana
  org: Incorta
  role: Committer
- name: Nick Dimiduk
  apacheId: ndimiduk
  githubId: ndimiduk
  org:
  role: PMC
  homepage: http://www.n10k.com
- name: Nishant Bangarwa
  apacheId: nishant
  githubId: nishantmonu51
  org: Hortonworks
  role: Committer
- name: Ruben Quesada Lopez
  apacheId: rubenql
  githubId: rubenada
  org: TIBCO
  role: PMC
- name: Rui Wang
  apacheId: amaliujia
  githubId: amaliujia
  org: Google
  role: Committer
- name: Sergey Nuyanzin
  apacheId: snuyanzin
  githubId: snuyanzin
  org: EPAM
  role: Committer
- name: Shuyi Chen
  apacheId: shuyichen
  githubId: suez1224
  org: Uber
  role: Committer
- name: Slim Bouguerra
  apacheId: bslim
  githubId: b-slim
  org: Hortonworks
  role: Committer
- name: Stamatis Zampetakis
  apacheId: zabetak
  githubId: zabetak
  org: Cloudera
  role: PMC
  homepage: https://people.apache.org/~zabetak/
- name: Steven Noels
  apacheId: stevenn
  githubId: stevenn
  org: NGData
  role: PMC
- name: Ted Dunning
  apacheId: tdunning
  githubId: tdunning
  org: MapR
  role: PMC
  avatar: https://mapr.com/blog/author/ted-dunning/assets/tdunning-panama.jpg
- name: Vineet Garg
  apacheId: vgarg
  githubId: vineetgarg02
  org: Cloudera
  role: Committer
- name: Vladimir Sitnikov
  apacheId: vladimirsitnikov
  githubId: vlsi
  org: NetCracker
  role: PMC
- name: Vladimir Ozerov
  apacheId: vozerov
  githubId: devozerov
  org: Querify Labs
  role: Committer
- name: Volodymyr Vysotskyi
  apacheId: volodymyr
  githubId: vvysotskyi
  org:
  role: PMC
- name: Wang Yanlin
  apacheId: yanlin
  githubId: yanlin-Lynn
  org: Ant Financial
  role: Committer
- name: Zhen Wang
  apacheId: zhenw
  githubId: zinking
  org:
  role: Committer
- name: Zhiqiang He
  apacheId: zhiqianghe
  githubId: Zhiqiang-He
  org: Huawei
  role: Committer
- name: Zhiwei Peng
  apacheId: zhiwei
  githubId: pengzhiwei2018
  org: Ant Financial Group
  role: Committer
- name: Zoltan Haindrich
  apacheId: kgyrtkirk
  githubId: kgyrtkirk
  org: Hortonworks
  role: Committer
# End contributors.yml
